CryptoJS 解密值与原始值不同
CryptoJS decrypted value differ from the original value
我正在尝试加密一些字符串并使用 CryptoJS
(AES-256) 对其进行解密。
我的javascript代码:
function hexStringToByte(str) {
if (!str) {
return new Uint8Array();
}
var a = [];
for (var i = 0, len = str.length; i < len; i+=2) {
a.push(parseInt(str.substr(i,2),16));
}
return new Uint8Array(a);
}
function aesEcryption(input, key, type){
var xx = input;
console.log("Print Value");
console.log(xx);
console.log(key);
var key = CryptoJS.enc.Hex.parse(key);
var iv = CryptoJS.enc.Hex.parse('00000000000000000000000000000000');
var encrypted = CryptoJS.AES.encrypt(xx, key, {iv: iv, padding: CryptoJS.pad.NoPadding});
console.log("Encrypted");
console.log(CryptoJS.enc.Base64.stringify(encrypted.ciphertext))
console.log(encrypted.toString());
return encrypted.toString();
}
function aesDecryption(encryptedString, key, type){
console.log("testttt");
console.log(key);
console.log(encryptedString);
var key = CryptoJS.enc.Hex.parse(key);
var iv = CryptoJS.enc.Hex.parse('00000000000000000000000000000000');
var decrypted = CryptoJS.AES.decrypt(encryptedString, key,{iv:iv, padding: CryptoJS.pad.NoPadding});
decrypted = decrypted.toString();
console.log("decrpyted");
// console.log(typeof decrypted);
// console.log(decrypted);
return decrypted;
}
我的设置:
fefe3124bdc21e8a1c1b3fdfb84c79950b394b8f86fd49dddb616037b1bc2474
(键)
a
(输入)
Qw==
(加密字符串)
d5
(解密后的值)
请问我的代码逻辑哪里有问题?
好的,我已经弄清楚为什么值会不同了。只需要去掉padding选项,解密后的值就和原来的一样了。
var encrypted = CryptoJS.AES.encrypt(xx, key, {iv: iv});
var decrypted = CryptoJS.AES.decrypt(encryptedString, key,{iv:iv});
我只是添加这个答案,以防有人遇到与我相同的问题。
干杯!
我正在尝试加密一些字符串并使用 CryptoJS
(AES-256) 对其进行解密。
我的javascript代码:
function hexStringToByte(str) {
if (!str) {
return new Uint8Array();
}
var a = [];
for (var i = 0, len = str.length; i < len; i+=2) {
a.push(parseInt(str.substr(i,2),16));
}
return new Uint8Array(a);
}
function aesEcryption(input, key, type){
var xx = input;
console.log("Print Value");
console.log(xx);
console.log(key);
var key = CryptoJS.enc.Hex.parse(key);
var iv = CryptoJS.enc.Hex.parse('00000000000000000000000000000000');
var encrypted = CryptoJS.AES.encrypt(xx, key, {iv: iv, padding: CryptoJS.pad.NoPadding});
console.log("Encrypted");
console.log(CryptoJS.enc.Base64.stringify(encrypted.ciphertext))
console.log(encrypted.toString());
return encrypted.toString();
}
function aesDecryption(encryptedString, key, type){
console.log("testttt");
console.log(key);
console.log(encryptedString);
var key = CryptoJS.enc.Hex.parse(key);
var iv = CryptoJS.enc.Hex.parse('00000000000000000000000000000000');
var decrypted = CryptoJS.AES.decrypt(encryptedString, key,{iv:iv, padding: CryptoJS.pad.NoPadding});
decrypted = decrypted.toString();
console.log("decrpyted");
// console.log(typeof decrypted);
// console.log(decrypted);
return decrypted;
}
我的设置:
fefe3124bdc21e8a1c1b3fdfb84c79950b394b8f86fd49dddb616037b1bc2474
(键)
a
(输入)
Qw==
(加密字符串)
d5
(解密后的值)
请问我的代码逻辑哪里有问题?
好的,我已经弄清楚为什么值会不同了。只需要去掉padding选项,解密后的值就和原来的一样了。
var encrypted = CryptoJS.AES.encrypt(xx, key, {iv: iv});
var decrypted = CryptoJS.AES.decrypt(encryptedString, key,{iv:iv});
我只是添加这个答案,以防有人遇到与我相同的问题。
干杯!