PHPを使用してJavaScriptおよびサーバー側を使用してクライアント側の暗号化を行っています。両側で同じキーとIVを使用しています。PHP、JavaScript、およびその逆を使用したAES暗号化
PHPの暗号化:
$string='test data';
$output = '';
$encrypt_method = 'AES-256-CBC';
$secret_key = 'secret key in hex';
$secret_iv = 'iv in hex';
$key = hash('sha256',$secret_key);
$output = openssl_encrypt($string,$encrypt_method,$key,0,$initialization_vector);
//Encrypted text in php
$output = base64_encode($output);
Javascriptの暗号化コード:
var key = 'secret key in hex';
key = CryptoJS.SHA256(key);
var ivHex = CryptoJS.enc.Hex.parse(' IV in hex ');
var options = { mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, iv:ivHex};
var obj='test data';
var encrypted = CryptoJS.AES.encrypt(obj,key ,options);
var encryptedBase64 = encrypted.toString();
//Encrypted text in javascript
console.log(encryptedBase64);
の両方が異なる出力を与えています。私は間違って何かしていますか?
openssl_encrypt()に固執します。最良の方法はAES-256-CTRで、もちろん16文字のIVを使用します。 – halojoy