我正在尝试使用 key 和 AES-JS 库解密数据。 每当我输入一个 16 字节的 key 时,我都会收到以下错误:
Error: "invalid ciphertext size (must be 16 bytes)"
我已经尝试将 key 更改为非 16 字节值,但随后出现此错误:
Error: "invalid key size (must be 16, 24 or 32 bytes)"
到目前为止,这是我的代码:
export const getEventBlockData = (cm, eventBlockData) => {
const encryptedBlockBuf = Buffer.from(eventBlockData, 'base64');
const aes = new aesjs.AES(aesjs.utils.utf8.toBytes('1111111111111111'));
const decryptedBlockBuffer = new Buffer(aes.decrypt(encryptedBlockBuf));
};
产生错误的部分是最后一行aes.decrypt(...
注意:cm var 应该是 key ,但出于测试目的,我将其替换为字符串“1111111111111111”,eventBlockData 是我要解密的缓冲区,他具有以下形式:
Event Block Data :{"type":"Buffer","data":[49,56,53,50,55,51,53,49,50,50,48,48,48,49,48,48,48,48,49]} cm-service.js:61
Encrypted Block buff :{"type":"Buffer","data":[49,56,53,50,55,51,53,49,50,50,48,48,48,49,48,48,48,48,49]}
感谢您的宝贵时间! :)
最佳答案
实际上错误是说无效的密文大小(必须是 16 字节)
,所以问题不在于您的 key
和更改 key
长度,就像您在帖子中所说的那样,不会解决问题,因为它与 key 无关。
这是一个常见且已知的 issue 涉及 the length of plaintext in CBC 当您使用长度不是 16 字节倍数的密文时,就会发生这种情况。
要解决这个问题,您需要添加一个 padding对于您的加密文本,有关更多详细信息,您可以阅读 Why must all inputs to AES be multiples of 16? .
关于javascript - 如何修复 Javascript 中的 'invalid ciphertext size' 错误? (aes),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54217592/