当前位置:首页 > php > 正文内容

PHP对称加密AES加密解密

CLG1年前 (2023-09-04)php319

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模式进行加密。

<?php
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 = '4kgnl652imnza6ln'; // 16字节长度的密钥
$iv = '4kgnl652imnza6ln'; // 16字节长度的初始向量
$aes = new AES($key, $iv);
$data = 'Hello, World!';
$encryptedECB = $aes->encrypt($data);
echo 'AES-128-ECB加密后的数据:' . $encryptedECB . "<br>";
$decryptedECB = $aes->decrypt($encryptedECB);
echo 'AES-128-ECB解密后的数据:' . $decryptedECB . "<br>";
$encryptedCBC = $aes->encryptCBC($data);
echo 'AES-256-CBC加密后的数据:' . $encryptedCBC . "<br>";
$decryptedCBC = $aes->decryptCBC($encryptedCBC);
echo 'AES-256-CBC解密后的数据:' . $decryptedCBC . "<br>";
?>


  CLG博客
赞助

打赏

扫描二维码至手机访问

本文来源:CLG博客

本文地址:https://clg.kim/14.html

版权声明:如无特别注明,转载请注明本文地址!

分享给朋友:

相关文章

PHP base64加密解密函数

以下函数代码中“123456” 是个加密的key,自己可以随便改。PHP加密函数:<?php     function strencode($...

PHP截取特定字符前面或后面的内容

1.截取特定字符前的内容$test = '/home/test/test.txt'; $result = substr($test,0,str...

PHP查找字符串中是否包含多个指定字符串

 //被查找的字符串  $string = '中文,string,21565489fewwords';  //指定的字符串 &n...

PHP自定义下载地址

有时候某些资源不好走直链或者需要设置下载限制的时候可以使用以下方法来达到目的。//下载的文件名称 $downname = date('Ymd').'.zi...

php动态密码访问网页

时代在进步分享一个密码是动态的访问网页代码。<?php error_reporting(0);  $pass= $_POST; $sj = rand...

php网页中时间过期提示源代码

网页中有一个有效期日期是:2020-12-31 23:59:59未超过日期时,显示:距离结束还剩几天,如果超过这个时间,则显示已失效。<?php date_default_timezone_s...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。