我正在尝试在 VB.NET 中使用 AESManaged 或 RijndaelManaged 解密和加密数据。我有一个大小不是块大小的倍数的数据包。在这种情况下,当我尝试解密时,它会出现“要解密的数据长度无效”的错误。如果我删除数据末尾的缺陷块,我只能解密它。但我需要知道最后一个街区是什么。
所以
是否可以解密大小不是块大小倍数的数据?
如果是,我该怎么做?
编辑:
有些信息我忘记写了。
分组密码模式必须是 CBC。因为我可以成功解密除最后一个字节之外的所有数据。
有一个客户端可以解密整个数据。我找到了解密器功能的 asm 代码。如果我理解正确,它的工作原理是这样的:
x = 块大小不足 (x < 16)
缓冲区 = 大小为 (16 + x) 的数组
- 首先,该函数抓取先前未解密的字节并将其放入缓冲区的前 16 个字节。(16 字节)
- 将未解密的最后一个字节附加到缓冲区。(x 字节)
- 从 buffer[x] 解密到缓冲区的末尾,并将结果放在同一个地方。(缓冲区的最后 16 个字节)
- 从 buffer[0] 解密到 buffer[15] 并将结果放到同一个地方。(缓冲区的前 16 个字节)
- 如您所知,CBC xors 用先前解密的字节解密字节。因此,函数将缓冲区的前 x 个字节与缓冲区的最后 x 个字节进行异或运算。
有没有办法可以在.NET中解密这样的最后一个字节?