【发布时间】:2013-03-08 09:55:10
【问题描述】:
我正在尝试在 VB.NET 中使用 AESManaged 或 RijndaelManaged 解密和加密数据。我有一个大小不是块大小的倍数的数据包。在这种情况下,当我尝试解密时,它会出现“要解密的数据长度无效”的错误。如果我删除数据末尾的缺陷块,我只能解密它。但我需要知道最后一个街区是什么。
所以
是否可以解密大小不是块大小的倍数的数据?
如果是,我该怎么做?
编辑:
有些信息我忘记写了。
分组密码模式必须是 CBC。因为我可以成功解密除最后一个字节之外的所有数据。
有一个客户端可以解密整个数据。我找到了解密器功能的 asm 代码。如果我理解正确,它的工作原理是这样的:
x = 块大小不足 (x
buffer = 一个大小为 (16 + x) 的数组
- 首先,该函数获取之前未解密的字节并将其放入缓冲区的前 16 个字节。 (16 字节)
- 将未解密的最后一个字节附加到缓冲区。 (x 字节)
- 从缓冲区[x] 解密到缓冲区的末尾,并将结果放在同一位置。 (缓冲区的最后 16 个字节)
- 从缓冲区[0] 解密到缓冲区[15] 并将结果放到同一个地方。 (缓冲区的前 16 个字节)
- 如您所知,CBC 将解密的字节与之前的解密字节进行异或运算。因此,函数将缓冲区的前 x 个字节与缓冲区的后 x 个字节进行异或运算。
有没有办法可以像这样在 .NET 中解密最后一个字节?
【问题讨论】:
-
您最好尝试找出使用了哪种模式,以及数据大小无效的原因。如果您只有部分数据,那么您可以切断最后一个字节并尝试解密数据。但这应该是最后的手段。
-
我添加了一些关于解密数据的信息。
标签: .net cryptography aes rijndael