我使用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;
}当函数被执行时,它提供如下数据
1438927d9bc8a42b9689a93c0fefc8506a5be0819feb2adb03c7b755c92cfd9b密钥: script.js:13:11 Salt_hex: 923ca1ab6dc88806b05f012c5f7df49f Salt_hex: 923CA1AB6DC88806B05F012C5F7DF49F script.js:14:11 Key: Salt script.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
字符串没有被解密,并且低于错误“坏的魔术数”。
请帮助我知道我们正在犯什么错误,以及需要做哪些更改才能使其正常工作
发布于 2020-06-08 15:27:37
我自己解决了它,我们必须使用由Crypto JS生成的密钥和iv来解密,所以openssl命令应该如下所示
openssl aes-256-cbc 1438927d9bc8a42b9689a93c0fefc8506a5be0819feb2adb03c7b755c92cfd9b -d -pbkdf2 -iter 100 -base64 -K openssl -iv d739119c45742e4f21eb8c987184b5c9 -in cryptoEnc.txt -out crypto.txt
https://stackoverflow.com/questions/62211400
复制相似问题