php对称加密AES加密解密

news2024/10/7 12:27:55

AES-128-ECB和AES-256-CBC是两种常见的AES加密模式,它们在加密方式和安全性上有以下区别:

  1. 加密方式:
    • AES-128-ECB:ECB(Electronic Codebook)模式是最简单的AES加密模式,它将数据分成固定大小的块,每个块独立加密。这意味着相同的明文块将始终加密为相同的密文块,因此ECB模式不适合加密重复模式的数据。
    • AES-256-CBC:CBC(Cipher Block Chaining)模式是一种分组密码模式,每个明文块都与前一个密文块进行异或操作后再加密。这种链接机制使得每个密文块依赖于前一个密文块,增加了安全性。
  2. 密钥长度:
    • AES-128-ECB:使用128位密钥进行加密,密钥长度为16字节。
    • AES-256-CBC:使用256位密钥进行加密,密钥长度为32字节。
  3. 安全性:
    • AES-128-ECB:由于ECB模式的特点,相同的明文块将始终加密为相同的密文块,可能导致一些安全问题。此外,ECB模式不提供消息完整性验证和抵抗重放攻击的能力。
    • AES-256-CBC:CBC模式通过使用初始向量和链接机制,增加了安全性和抵抗重放攻击的能力。相同的明文块将根据前一个密文块的不同加密为不同的密文块,提供了更好的数据混淆性和安全性。 综上所述,AES-256-CBC相对于AES-128-ECB提供了更高的安全性,尤其是在处理重复模式的数据和抵抗重放攻击时更为有效。因此,在实际应用中,如果安全性要求较高,通常会选择AES-256-CBC模式进行加密。
class AES {
    private $key;
    private $iv;

    public function __construct($key, $iv) {
        $this->key = $key;
        $this->iv = $iv;
    }

    public function encrypt($data) {
        $encrypted = openssl_encrypt($data, 'AES-128-ECB', $this->key, OPENSSL_RAW_DATA);
        return base64_encode($encrypted);
    }

    public function decrypt($encryptedData) {
        $decrypted = openssl_decrypt(base64_decode($encryptedData), 'AES-128-ECB', $this->key, OPENSSL_RAW_DATA);
        return $decrypted;
    }

    public function encryptCBC($data) {
        $encrypted = openssl_encrypt($data, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->iv);
        return base64_encode($encrypted);
    }

    public function decryptCBC($encryptedData) {
        $decrypted = openssl_decrypt(base64_decode($encryptedData), 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->iv);
        return $decrypted;
    }
}
// 使用示例:
$key = '0123456789abcdef'; // 16字节长度的密钥
$iv = 'fedcba9876543210'; // 16字节长度的初始向量
$aes = new AES($key, $iv);
$data = 'Hello, World!';
$encryptedECB = $aes->encrypt($data);
echo 'AES-128-ECB加密后的数据:' . $encryptedECB . "\n";
$decryptedECB = $aes->decrypt($encryptedECB);
echo 'AES-128-ECB解密后的数据:' . $decryptedECB . "\n";
$encryptedCBC = $aes->encryptCBC($data);
echo 'AES-256-CBC加密后的数据:' . $encryptedCBC . "\n";
$decryptedCBC = $aes->decryptCBC($encryptedCBC);
echo 'AES-256-CBC解密后的数据:' . $decryptedCBC . "\n";

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/723154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS 自定义提示(重写 title 属性)

前言 CSS 原生 title 属性太丑&#xff0c;需要重写 效果 改造 HTML 代码第2行&#xff0c;tip-label 自定义属性 <div class"tools"><div class"btn tip" v-for"item of list" :key"item.icon" :tip-label"item.l…

允许Traceroute探测漏洞和ICMP timestamp请求响应漏洞解决方法

目录 服务器检测出了漏洞需要修改 1.允许Traceroute探测漏洞解决方法 2、ICMP timestamp请求响应漏洞 服务器检测出了漏洞需要修改 1.允许Traceroute探测漏洞解决方法 详细描述 本插件使用Traceroute探测来获取扫描器与远程主机之间的路由信息。攻击者也可以利用这些信息来…

Sentinel持久化实战

前言 Sentinel有pull&#xff08;拉&#xff09;模式&#xff0c;和push&#xff08;推&#xff09;模式。本文是使用reids实现pull模式。 通过SPI机制引入自己的类 在项目的 resources > META-INF > services下创建新文件&#xff0c;文件名如下&#xff0c;内容是自…

centos7系统一键离线安装docker

离线安装脚本 # 离线安装docker rpm -Uvh --force --nodeps *.rpm # 启动docker systemctl start docker sudo systemctl daemon-reload # 设置开机自动启动docker systemctl enable docker.service下载 程序包下载地址 https://gitcode.net/zenglg/centos7_docker_offline_…

泛微E9鉴权

调用OA鉴权接口的过程 认证流程时序图 第一步、注册许可 请求地址&#xff1a; ​ http://泛微服务地址/api/ec/dev/auth/regist 请求方式&#xff1a;post 请求头部参数&#xff08;request headers&#xff09;&#xff1a; 参数名必选类型说明appid是string许可证号码…

前端学习——jsDay4

函数 函数使用 小练习 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widt…

【算法与数据结构】232、LeetCode用栈实现队列

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;这道题要求我们用栈模拟队列&#xff08;工作上一定没人这么搞&#xff09;。程序当中&#xff0c;pus…

【cuda】cuda-12.0对应tensorflow-gpu安装

我的cuda是12.0的&#xff0c;先根据下面的链接装了cudnn (12条消息) Windows10系统CUDA和CUDNN安装教程_windows安装cudnn_流泪&#xff06;枯萎的博客-CSDN博客 (12条消息) 【精简】2023年最新Windows安装GPU版本的tensorflow&#xff08;含bug记录及解决&#xff09;_tenso…

js引入json文件

引入json文件有多种方法&#xff0c;这里记录一种方法&#xff1a; 1、有json文件 文件内容 2、上传到服务器获得url&#xff08;也可以不上传&#xff09; 获取url:“https://asc-test1.oss-cn-beijing.aliyuncs.com/2023/07/05/b1917481d4eb40628bc6d10113896d82taizhou.jso…

玩机搞机---小米刷机工具平台刷写报错对症解决方法

安卓玩机搞机技巧综合资源-----全安卓机型通用线刷 卡刷教程。新老机型可参考【十八】 小米刷机平台工具版本较多。有时候更换工具版本刷机会有不同的提示。虽然目前很多第三方包都采用脚本方式刷写&#xff0c;但我们具体要了解使用官方工具报错究竟是什么原因。常见的报错有…

Ae 效果:CC Vignette

风格化/CC Vignette Stylize/CC Vignette CC Vignette&#xff08;CC 暗角&#xff09;效果可以用于各种场景&#xff0c;例如添加电影感、突出焦点、调整色调或增加视觉吸引力。使用 CC Vignette&#xff0c;可以轻松地为图像或视频创建独特的暗角效果&#xff0c;使其更具艺术…

【Git原理与使用】-- 标签管理

目录 理解标签 创建标签 操作标签 删除 推送 理解标签 标签 tag &#xff0c;可以简单的理解为是对某次 commit 的⼀个标识&#xff0c;相当于起了⼀个别名。例如&#xff1a;在项目发布某个版本的时候&#xff0c;针对最后⼀次 commit 起⼀个 v1.0 这样的标签来标识里程碑…

C++初阶之类和对象(下)

类和对象&#xff08;下&#xff09; 1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 2. static成员2.1 概念2.2 特性 3. 友元3.1 友元函数3.2 友元类 4. 内部类5.匿名对象6.拷贝对象时的一些编译器优化结语 1. 再谈构造函数 1.1 构造函数体赋值 在创建…

AIGC - Stable Diffusion 的 AWPortrait 1.1 模型与 Prompts 设置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131565908 AWPortrait 1.1 网址&#xff1a;https://www.liblibai.com/modelinfo/721fa2d298b262d7c08f0337ebfe58f8 介绍&#xff1a;AWPortrai…

win10+cuda11.8+opencv4.5.5使用cuda运行yolov5

环境&#xff1a;win10 cuda11.8(尝试使用最新的12.1无法安装&#xff09; Vs2019(尝试Vs2015无法源码安装&#xff09;opencv4.5.5 cmake-gui 3.26.4&#xff0c;电脑GPU是4080 1、安装Vs2019和cuda11.8&#xff0c;下载opencv4.5.5和对应的opencv_contrib-4.5.5&#xff0c;下…

Android Studio实现内容丰富的安卓校园新闻浏览平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号070 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看新闻列表…

Python安装完成后执行pip命令报错:‘pip‘ 不是内部或外部命令,也不是可运行的程序

解决办法&#xff1a; 已安装pip的情况下&#xff0c;把这个Scripts文件夹的目录添加到Path环境变量即可。   我的电脑 -> 右键 属性 -> 高级系统设置 -> 环境变量 -> path -> 编辑&#xff1a;加入Scripts文件夹的目录    确定即可

《一》Midjourney 傻瓜式入门教程

Midjourney 傻瓜式教程-注册入门篇 Midjourney 是基于 ChatGPT 的衍生 AI 绘画工具&#xff0c;可以用来绘制书本内的插图&#xff0c;绘本&#xff0c;漫画&#xff0c;海报&#xff0c;头像等等。总之&#xff0c;只有想不到&#xff0c;没有做不到的图。 Midjourney上手简…

Python GUI设计-PyQt5从入门到实践(第1-3章)

第一章 Python 与 Pyqt5 良好的开端&#xff0c;等于成功的一半 ————柏拉图 1.1 python语言简介 1.1.3 Python的应用领域 Web开发、大数据处理、人工智能、自动化运维开发、云计算、爬虫、游戏开发。 1.2 GUI 与 PyQt5 第二章 搭建开发环境 2.1 Python的下载与安装 Pyt…

Java JSP实战

综合实战&#xff1a; 实现利用servletservicedao实现查询所有&#xff0c;对象&#xff0c;增删改&#xff0c; t_house(int no,String housename,Double height) 步骤1&#xff1a;创建maven工程 步骤2&#xff1a;创建工程包entity,dao,util,service,servlet 步骤3&#x…