Open shiqikai opened 5 years ago
CBC Operates against blocks, so the data length must be a multiple of 16.
See the CBC section here: https://en.m.wikipedia.org/wiki/Block_cipher_mode_of_operation
Hope this helps. :)
How to solve this problem, I also encountered this pit
I don't know how to use it gracefully.Please help me write a better code. ------------------------------------------My code-------------------------------------------- function aesEcpt(text, pwd) { var shp = sha256_digest(pwd); var key = []; var iv = []; for (var i = 0; i < 32; i++) { var itm = shp.charCodeAt(i); if (i < 16) key.push(itm); else iv.push(itm); } var textBytes = aesjs.utils.utf8.toBytes(text); var aesCbc = new aesjs.ModeOfOperation.cbc(key, iv); var encryptedBytes = aesCbc.encrypt(textBytes); var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes); return encryptedHex; } function aesDcpt(text, pwd) { var shp = sha256_digest(pwd); var key = []; var iv = []; for (var i = 0; i < 32; i++) { var itm = shp.charCodeAt(i); if (i < 16) key.push(itm); else iv.push(itm); } var encryptedBytes = aesjs.utils.hex.toBytes(text); var aesCbc = new aesjs.ModeOfOperation.cbc(key, iv); var decryptedBytes = aesCbc.decrypt(encryptedBytes); var decryptedText = aesjs.utils.utf8.fromBytes(decryptedBytes); return decryptedText; }
But when I'm using ECB mode, this error occurs too. And in Java, the bytes array is not limited to 16*N bytes.
Perhaps Cipher Text Stealing should be implemented in CBC mode, to support arbitrary plaintext lengths:
use the below functions, it will help in this issue
aesjs.padding.pkcs7.pad() aesjs.padding.pkcs7.strip()
aes-js version: 3.1.2. why should the length of plaintext in CBC be 16?