在使用 PHP 的 OpenSSL 扩展进行 AES 加密时,为了确保加密结果的一致性,你需要遵循以下几个步骤:
- 设置加密参数:确保使用相同的加密算法、密钥、初始化向量(IV)和填充方式。例如,使用 AES-256-CBC 加密模式,确保所有加密操作都使用相同的这些参数。
$key = 'your-secret-key'; // 长度必须为 32 个字符 $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc')); // 生成一个随机的 IV $padding = openssl_cipher_iv_length('aes-256-cbc');
- 创建加密函数:编写一个加密函数,该函数接受明文、密钥、IV 和填充方式作为参数,并返回加密后的密文。确保在函数内部使用相同的参数和 OpenSSL 函数进行加密。
function encryptAes($plaintext, $key, $iv, $padding) {
$ciphertext = openssl_encrypt($plaintext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
return base64_encode($ciphertext . '::' . $padding);
}
- 创建解密函数:编写一个解密函数,该函数接受密文、密钥、IV 和填充方式作为参数,并返回解密后的明文。确保在函数内部使用相同的参数和 OpenSSL 函数进行解密。
function decryptAes($ciphertext, $key, $iv, $padding) {
$parts = explode('::', base64_decode($ciphertext));
$ciphertext = $parts[0];
$padding = $parts[1];
return openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
}
- 使用加密和解密函数:在需要加密或解密数据时,使用上面创建的函数,并确保传递相同的参数。
$plaintext = 'Hello, world!'; $encrypted = encryptAes($plaintext, $key, $iv, $padding); $decrypted = decryptAes($encrypted, $key, $iv, $padding); echo 'Encrypted: ' . $encrypted . PHP_EOL; echo 'Decrypted: ' . $decrypted . PHP_EOL;
遵循以上步骤,可以确保在使用 PHP 的 OpenSSL 扩展进行 AES 加密时,加密结果的一致性。