Sneha Boopal
Sneha Boopal

Reputation: 1

Decrypt data using CryptoJs

I'm using below code to encrypt data using CryptoJS

export const encryptData = (data) => {
    let key = CryptoJS.enc.Utf8.parse(api.encryption.Key);
    let iv = {
        keySize: 128 / 8,
        iv: CryptoJS.enc.Utf8.parse(api.encryption.IV),
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    };
    return encodeURIComponent(CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(data), key, iv));
}

And for decrypting the data i used below code. But data is not getting decrypted. However encrypt is working fine.

export const decryptData = (data) => {
    let key = CryptoJS.enc.Utf8.parse(api.encryption.Key);
    let iv = {
        keySize: 128 / 8,
        iv: CryptoJS.enc.Utf8.parse(api.encryption.IV),
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    };
    return decodeURIComponent(CryptoJS.AES.decrypt(CryptoJS.enc.Utf8.parse(data), key, iv));
}

Any idea what I am doing wrong while decrypting?

Upvotes: 0

Views: 1385

Answers (1)

Andrea Giammarchi
Andrea Giammarchi

Reputation: 3198

I think the issue is that when you encrypt you return encodeURIComponent string, but when you decrypt you decode such string too late.

export const decryptData = (data) => {
  let key = CryptoJS.enc.Utf8.parse(api.encryption.Key);
  let iv = {
      keySize: 128 / 8,
      iv: CryptoJS.enc.Utf8.parse(api.encryption.IV),
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
  };
  return CryptoJS.AES.decrypt(decodeURIComponent(data), key, iv).toString(CryptoJS.enc.Utf8);
}

this version, instead, decode data before passing it to decrypt, otherwise you decrypt something that has been encoded, hence it's not usable for decrypt.

Upvotes: 1

Related Questions