javascript - 如何修复 Javascript 中的 'invalid ciphertext size' 错误? (aes)

标签 javascript html encryption vue.js aes

我正在尝试使用 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/

相关文章:

javascript - 限制特定列的单击事件

javascript - 环回 neq : null

javascript - HTML5 将 Canvas 保存到服务器上的文件

java - 在解密过程中,如何将GCM身份验证标签放在密码流的末尾需要内部缓冲?

c# - CryptoStream 在关闭解密时抛出错误

javascript - ng-model 内部 radio 输入刷新

javascript - 单击/切换另一个 div 时更改 div 上的类

javascript - jQuery 在 slideDown/Up 期间滞后

html - 使 div 在悬停时移动其他 div

c - C中交换字母的加密