PHP对称加密AES加密解密
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>"; ?>