Der umgeschriebene Titel lautet: PHP-Version der AES-Verschlüsselungsfunktion von CryptoJS
P粉329425839
2023-08-31 23:20:42
<p>Ich versuche, mit CryptoJS ein PHP-Äquivalent dieses JS-Codes zu erstellen: </p>
<pre class="brush:php;toolbar:false;">function aesEncrypt (data) {
const key = 'GSTEGSTEjdfheyhdHSHSHSHDHHDHmdjjdn12ndndn5r=';
const iv = '
const cipher = CryptoJS.AES.encrypt(data, CryptoJS.enc.Base64.parse(key), {
iv: CryptoJS.enc.Utf8.parse(iv), // Parse IV
Polsterung: CryptoJS.pad.Pkcs7,
Modus: CryptoJS.mode.CBC
})
cipher.toString() zurückgeben
}</pre>
<p>Das Ergebnis des JS-Codes: pHjpwiyKq7Rf4dFcBMbm1w==</p>
<p>Dies ist PHP-Code, den ich durch das Lesen anderer Stackoverflow-Fragen geschrieben habe. Es wird jedoch nicht das gleiche Ergebnis zurückgegeben. </p>
<pre class="brush:php;toolbar:false;">$plaintext = "plainText";
$method = 'aes-256-cbc';
$key = base64_encode("GSTEGSTEjdfheyhdHSHSHSHDHHDHmdjjdn12ndndn5r=");
$iv = hex2bin('0000000000000000000000000000000');
$ciphertext = openssl_encrypt(
$plaintext,
$Methode,
$key,
OPENSSL_RAW_DATA,
$iv
);
$ciphertext = base64_encode($ciphertext);
echo $ciphertext;</pre>
<p>Ergebnis des PHP-Codes: +YJOMi2vISmEXIjUZls3MA==</p>
尝试这个:
在PHP代码中,密钥必须进行Base64 解码,而不是Base64编码:
通过这个改变,所需的密文被创建出来。
请注意,如果在
openssl_encrypt()
调用的第四个参数中传递0
而不是OPENSSL_RAW_DATA
,则密文默认会进行Base64编码。因此,明确对密文进行Base64编码是不必要的。请记住,静态IV是不安全的。通常在加密过程中,会生成一个随机的IV,并将其与密文一起传递给解密方(通常是拼接在一起)。