我正在尝试用CryptoJS创建一个相当于这个JS代码的PHP:
function aesEncrypt (data) {
const key = 'GSTEGSTEjdfheyhdHSHSHSHDHHDHmdjjdn12ndndn5r=';
const iv = '\0';
const cipher = CryptoJS.AES.encrypt(data, CryptoJS.enc.Base64.parse(key), {
iv: CryptoJS.enc.Utf8.parse(iv), // parse the IV
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC
})
return cipher.toString()
}
js代码的结果:pHjpwiyKq7Rf4dFcBMbm1w==
这是我通过阅读其他stackoverflow问题编写的PHP代码。2但是它没有返回相同的结果。
$plaintext = "plainText";
$method = 'aes-256-cbc';
$key = base64_encode("GSTEGSTEjdfheyhdHSHSHSHDHHDHmdjjdn12ndndn5r=");
$iv = hex2bin('00000000000000000000000000000000');
$ciphertext = openssl_encrypt(
$plaintext,
$method,
$key,
OPENSSL_RAW_DATA,
$iv
);
$ciphertext = base64_encode($ciphertext);
echo $ciphertext;
PHP代码的结果:+YJOMi2vISmEXIjUZls3MA==
2条答案
按热度按时间qnakjoqk1#
在PHP代码中,键必须是Base64de编码,而不是Base64编码:
通过此更改,创建了所需的密文。
注意,如果在
openssl_encrypt()
调用的第四个参数中传递的是0
而不是OPENSSL_RAW_DATA
,则默认情况下密文是Base64编码的,这样就不需要显式地对密文进行Base64编码。请记住静态IV是不安全的,通常在加密过程中会生成一个 random IV,它会与密文沿着传递到解密端(通常是级联的)。
z9gpfhce2#
试试这个: