Search code examples
javascriptcryptojs

padding remain after decryption


I want to encrypt and decrypt string using AES CBC but the problem is the padding remain after decryption ;

key="wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"; 
iv="1111111111111111";
var encrypted = CryptoJS.AES.encrypt("60000", key, { iv: iv , padding: CryptoJS.pad.Pkcs7, mode: CryptoJS.mode.CBC});
var decrypted = CryptoJS.AES.decrypt(encrypted, key, { 
    iv: iv, 
    padding: CryptoJS.pad.Pkcs7,
    mode: CryptoJS.mode.CBC

  });
console.log("mmh-dec",decrypted.toString());

I got "3630303030" instead of 60000


Solution

  • Encoding is missing when converting the bytes to string.

    decrypted.toString()
    

    should be:

    decrypted.toString(CryptoJS.enc.Utf8)
    

    Example snippet:

    key="wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"; 
    iv="1111111111111111";
    
    var encrypted = CryptoJS.AES.encrypt("60000", key, {
        iv: iv,
        padding: CryptoJS.pad.Pkcs7,
        mode: CryptoJS.mode.CBC
    });
    
    var decrypted = CryptoJS.AES.decrypt(encrypted, key, { 
        iv: iv, 
        padding: CryptoJS.pad.Pkcs7,
        mode: CryptoJS.mode.CBC
    });
    
    console.log("mmh-dec",decrypted.toString(CryptoJS.enc.Utf8));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>