【发布时间】:2023-03-16 10:53:01
【问题描述】:
在过去的 2 天里,我一直在努力解决我最初认为实施起来轻而易举的事情。
我需要一种非常简单且不安全的方法来通过 AJAX 发送密码并在服务器端解密
我正在使用来自 CryptoJS 的 AES:
JS 加密
msg = "message";
var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f');
var iv = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f');
var encrypted = CryptoJS.AES.encrypt(msg, key, { iv: iv });
var data_base64 = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
var iv_base64 = encrypted.iv.toString(CryptoJS.enc.Base64);
var key_base64 = encrypted.key.toString(CryptoJS.enc.Base64);
console.log(data_base64,iv_base64,key_base64) //If I use these keys in the PHP decryption it works
return encrypted.toString();
...和使用mCrypt进行PHP解密
$encrypted = "f82126a59b76d86946a013d9f575d0d4"; //this is what the JS function above returned.
$key = "000102030405060708090a0b0c0d0e0f"; //same key as in JS function
$iv = "101112131415161718191a1b1c1d1e1f"; //same IV as in JS function
$plaintext = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_CBC, $iv ), "\t\0 " );
echo "Original string : " . $encrypted . "<br />\n";
echo "Decrypted string : " . $plaintext . "<br />\n";
由于我使用相同的 IV 和 key 进行加密,我希望这可以很好地解密。但是我似乎遗漏了一些东西,因为我仍然在 plaintext. 看到胡言乱语
编辑:
看来 AES 的全部目的是
keys和 我必须使用的IV由 CryptoJS 输出(参见console.log中的 JS函数)。如果我使用这些功能似乎运行得很好。 但我实际上不希望这样,因为这些键是动态的 因此,每次我运行它们更改的 JS 函数时都会生成。 我只是 在客户端和服务器之间需要一个共享的私钥,用于 加密/解密并且是静态的。就这么简单。
【问题讨论】:
标签: javascript php encryption cryptojs