【发布时间】:2015-06-13 03:11:11
【问题描述】:
在客户端(移动设备)我使用 CryptoJS 加密用户密码:
var lib_crypt = require('aes');
$.loginButton.addEventListener('click', function(e){
var key = lib_crypt.CryptoJS.enc.Hex.parse('bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3');
var iv = lib_crypt.CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f');
var encrypted = lib_crypt.CryptoJS.AES.encrypt($.passwordInput.value, key, { iv: iv });
var password_base64 = encrypted.ciphertext.toString(lib_crypt.CryptoJS.enc.Base64);
return password_base64;
});
在服务器端我想用 mcrypt_decrypt 解密它:
function decryptPassword($password)
{
$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");
$ciphertext_dec = base64_decode($password);
$iv_dec = "101112131415161718191a1b1c1d1e1f";
$ciphertext_dec = substr($ciphertext_dec, 16);
$decryptedPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
return trim($decryptedPassword);
}
我使用相同的密钥和IV,我做错了什么?
【问题讨论】:
-
您可能想要添加您遇到的问题的示例。从代码来看,我目前只是假设我的答案。
-
感谢 Artjom 的快速响应,删除填充用什么更好:Maarten Bodewes 或 trim() 的解决方案?谢谢
-
trim()仅在 16 次中有效。永远不要trim(),因为如果明文在开头或结尾包含零字节或空格,这可能会导致无法预料的后果。
标签: javascript php encryption mcrypt cryptojs