使用 CryptoJS 加密字符串 使用 OpenSSL 解密不起作用(对 PBKDF2 使用 Salt 和密码)



我正在使用CryptoJS加密密码,这是我使用的示例代码

var keySize = 256;
var ivSize = 128;
var iterations = 100;
var message = "Hello World";
var password = "SecretPassword";
function encrypt (msg, pass) {
var salt = CryptoJS.lib.WordArray.random(128 / 8); 
var salt_hex = CryptoJS.enc.Hex.stringify(salt);
console.log("Salt: "+salt);
console.log("Salt_hex: ", salt_hex.toUpperCase());
var key = CryptoJS.PBKDF2(pass, salt, {
keySize: keySize / 32,
iterations: iterations
});
console.log("Key: "+ key);
var iv = CryptoJS.lib.WordArray.random(128/8);
console.log("IV:"+iv);
var encrypted = CryptoJS.AES.encrypt(msg, key, { 
iv: iv, 
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC
});
console.log("Enc: ", encrypted.toString());
// salt, iv will be hex 32 in length
// append them to the ciphertext for use  in decryption
var transitmessage = salt.toString()+ iv.toString() + encrypted.toString();
return transitmessage;
}

当函数被执行时,它提供的数据如下

盐 923ca1ab6dc88806b05f012c5f7df49f 脚本.js:13:11 Salt_hex:923CA1AB6DC88806B05F012C5F7DF49F 脚本.js:14:11 密钥:1438927d9bc8a42b9689a93c0fefc8506a5be0819feb2adb03c7b755c92cfd9b 脚本.js:25:11 IV:d739119c45742e4f21eb8c987184b5c9 script.js:27:11 Enc: WUBXNygIgehq90li8p08nw==

我们必须使用 OpenSSL 在服务器端解密生成的加密字符串。所以我们做如下 我们将加密的字符串复制到"WUBXNygIgehq90li8p08nw=="cryptenc.txt.enc文件并执行openssl命令,如下所示。

openssl aes-256-cbc -d -pbkdf2 -s 923ca1ab6dc88806b05f012c5f7df49f -iter 100 -k SecretPassword -in cryptenc.txt.enc -out cryptencout.txt

字符串未解密并低于错误"坏幻数"。

请帮助我知道我们正在犯什么错误以及要做哪些更改才能使其正常工作

我自己解决了,我们必须使用 Crypto JS 生成的密钥和 iv 来解密,所以 openssl 命令应该如下

openssl aes-256-cbc -d -pbkdf2 -iter 100 -base64 -K 1438927d9bc8a42b9689a93c0fefc8506a5be0819feb2adb03c7b755c92cfd9b -iv d739119c45742e4f21eb8c987184b5c9 -in cryptoEnc.txt -out crypto.txt

最新更新