[英]AES encryption using Php , javascript and vise versa
我正在使用 javascript 和服务器端使用 PHP 进行客户端加密。 我们双方都使用相同的密钥和 IV。
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);
两者都给出不同的输出。 我做错了什么吗?
$secret_iv
已定义,但在openssl_encrypt()
使用了未定义的$initialization_vector
。0
,而是希望传递OPENSSL_RAW_DATA
(一个常量)。hash('sha256', $secret_key)
但在 Javascript 中直接使用secret_key
。
hash('sha256', $some_text_input)
)非常弱。 请考虑 PBKDF2-SHA256。重要提示:没有 HMAC 的 AES-CBC 容易受到padding-oracle 攻击。 您应该始终使用经过身份验证的加密。
安全加密的示例如下所示。 解密涉及更多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.