我正在尝试用AESManaged或RijndaelManaged在VB.NET中解密和加密数据。我有一个大小不是块大小的倍数的数据包。在这种情况下,当我试图解密时,它会产生错误,因为“要解密的数据的长度无效”。只有在删除数据末尾的缺陷块时,我才能解密它。但我要知道最后一条街到底是什么。
所以
是否有可能解密大小不是块大小倍数的数据?
如果是的话,我怎么做呢?
编辑:
有些信息我忘了写。
分组密码模式必须是CBC。因为我可以成功地解密除最后一个字节之外的所有数据。
有一个客户端可以解密整个数据。我找到了解密函数的asm代码。如果我理解得对,它的工作方式是这样的:
X=缺块大小(x < 16)
缓冲区=大小为(16 + x)的数组
有办法在.NET中解密像这样的最后字节吗?
发布于 2013-03-08 13:37:00
更新:
您可能有一个CBC模式与密文窃取,这是可能的实现只使用cbc实现的cbc-cts。
原件:
确保所有的数据包都是密文。如果它的前缀是一个标题或什么东西,可以通过您的长度和解密算法,它不会抱怨前缀数据,它只会解密到垃圾,然后才结束,并抱怨填充。
如果使用认证加密,通常也会使用mac对密文进行后缀,这也会给您提供一个非块长度的倍数,但如果是这样,则需要在解密前读取x最后一个字节并验证您的密文(通常使用的是HMAC)。
此外,要确保您使用的是正确的AES模式,该模式与您的密文源相匹配。有些AES模式不需要块大小倍数,但在内置的.net密码系统中通常不支持它们。
https://stackoverflow.com/questions/15291176
复制相似问题