リライトしたタイトルは「PHP版CryptoJS aes暗号化機能」です。
P粉329425839
2023-08-31 23:20:42
<p>CryptoJS を使用して、この JS コードと同等の PHP を作成しようとしています。</p>
<pre class="brush:php;toolbar:false;">関数 aesEncrypt (データ) {
const key = 'GSTEGSTEjdfheyhdHSHSHSHDHHDHmdjjdn12ndndn5r=';
const iv = '\0';
const cipher = CryptoJS.AES.encrypt(data, CryptoJS.enc.Base64.parse(key), {
iv: CryptoJS.enc.Utf8.parse(iv), // 解析 IV
パディング: CryptoJS.pad.Pkcs7、
モード: CryptoJS.mode.CBC
})
cipher.toString()を返す
}</pre>
<p>JS コードの結果: pHjpwiyKq7Rf4dFcBMbm1w==</p>
<p>これは、スタックオーバーフローの他の質問を読んで私が書いた PHP コードです。しかし、同じ結果は返されません。 </p>
<pre class="brush:php;toolbar:false;">$plaintext = "plainText";
$method = 'aes-256-cbc';
$key =base64_encode("GSTEGSTEjdfheyhdHSHSHSHDHHDHmdjjdn12ndndn5r=");
$iv = hex2bin('0000000000000000000000000000000');
$ciphertext = openssl_encrypt(
$平文、
$メソッド、
$キー、
OPENSSL_RAW_DATA、
$iv
);
$ciphertext = Base64_encode($ciphertext);
echo $ciphertext;</pre>
<p>PHP コードの結果: YJOMi2vISmEXIjUZls3MA==</p>
###これを試して: ### リーリー
PHP コードでは、キーは Base64 でエンコードされた ではなく、Base64 デコードされた
である必要があります。 リーリーこの変更により、必要な暗号文が作成されます。
openssl_encrypt()
呼び出しの 4 番目のパラメータにOPENSSL_RAW_DATA
の代わりに0
が渡されると、暗号化が行われないことに注意してください。ファイルはデフォルトで Base64 でエンコードされます。したがって、暗号文を明示的に Base64 エンコードする必要はありません。静的 IV は安全ではないことに注意してください。通常、暗号化プロセス中に、random IV が生成され、暗号文とともに復号化側に渡されます (通常は結合されます)。