I am trying to encrypt some strings and decrypt it with the use of CryptoJS
(AES-256).
My javascript code:
JavaScript
x
42
42
1
function hexStringToByte(str) {
2
if (!str) {
3
return new Uint8Array();
4
}
5
6
var a = [];
7
for (var i = 0, len = str.length; i < len; i+=2) {
8
a.push(parseInt(str.substr(i,2),16));
9
}
10
11
return new Uint8Array(a);
12
}
13
14
function aesEcryption(input, key, type){
15
var xx = input;
16
console.log("Print Value");
17
console.log(xx);
18
console.log(key);
19
var key = CryptoJS.enc.Hex.parse(key);
20
var iv = CryptoJS.enc.Hex.parse('00000000000000000000000000000000');
21
var encrypted = CryptoJS.AES.encrypt(xx, key, {iv: iv, padding: CryptoJS.pad.NoPadding});
22
console.log("Encrypted");
23
console.log(CryptoJS.enc.Base64.stringify(encrypted.ciphertext))
24
console.log(encrypted.toString());
25
return encrypted.toString();
26
}
27
28
29
function aesDecryption(encryptedString, key, type){
30
console.log("testttt");
31
console.log(key);
32
console.log(encryptedString);
33
var key = CryptoJS.enc.Hex.parse(key);
34
var iv = CryptoJS.enc.Hex.parse('00000000000000000000000000000000');
35
var decrypted = CryptoJS.AES.decrypt(encryptedString, key,{iv:iv, padding: CryptoJS.pad.NoPadding});
36
decrypted = decrypted.toString();
37
console.log("decrpyted");
38
// console.log(typeof decrypted);
39
// console.log(decrypted);
40
return decrypted;
41
}
42
My setup:
fefe3124bdc21e8a1c1b3fdfb84c79950b394b8f86fd49dddb616037b1bc2474
(key)
a
(Input)
Qw==
(Encrypted string)
d5
(decrypted value)
May I know which part of my code logic is wrong ?
Advertisement
Answer
Alright, I have figured out why the value would be different. Just need to remove the padding option, the decrypted value will be same as the original.
var encrypted = CryptoJS.AES.encrypt(xx, key, {iv: iv});
var decrypted = CryptoJS.AES.decrypt(encryptedString, key,{iv:iv});
I am just adding this answer, incase someone had the same issue as me.
Cheers!