【发布时间】:2017-07-13 13:47:57
【问题描述】:
我在 JavaScript 中生成与第三方 PHP 服务器中提供的相同密文时遇到问题。服务器端使用简单的单线生成密钥,但我无法在我的 JavaScript 客户端中找到相同的方法。
我决定使用来自 other SO answers 的 CryptoJS 库,我确实生成了一个密文,但它与来自 PHP 服务器的不同。
PHP 加密:
echo openssl_encrypt("5905","AES-256-CBC","FbcCY2yCFBwVCUE9R+6kJ4fAL4BJxxjdRcqy5rHVLwU=",NULL,"e16ce913a20dadb8");
// phgygAJB3GA0sa4D9k/d8A==
我尝试了 Stack Overflow 的几种解决方案,但都未能创建相同的密文。
另外,PHP 单行中的参数“AES-256-CBC”让我很困扰:我知道 AES 是什么,但我不知道那些 256 或 CBC 部分是什么,我不知道在哪里将它们设置在 CryptoJS 端。
我目前的尝试:
var key = 'FbcCY2yCFBwVCUE9R+6kJ4fAL4BJxxjdRcqy5rHVLwU=';
var iv = 'e16ce913a20dadb8';
var encrypted = CryptoJS.AES.encrypt("5905", CryptoJS.enc.Hex.parse(key), { iv: CryptoJS.enc.Hex.parse(iv) });
var r1 = encrypted.ciphertext.toString(); // def44f8822cfb3f317a3c5b67182b437
var r2 = CryptoJS.enc.Base64.stringify(encrypted.ciphertext) // 3vRPiCLPs/MXo8W2cYK0Nw==
我的猜测是我在 JavaScript 中的某处缺少“256”和“CBC”参数。
【问题讨论】:
标签: javascript encryption encoding cryptojs