我正在尝试使用VB.NET中的AESManaged或RijndaelManaged解密和加密数据。我有一个数据包,其大小不是块大小的倍数。在这种情况下,当我尝试解密时,它会给出“要解密的数据长度无效”的错误。如果我删除数据末尾的缺陷块,我只能解密它。但我需要知道最后一块是什么。
所以
是否可以解密大小不是块大小倍数的数据?
如果是,我该怎么做?
我忘了写一些信息。
分组密码模式必须是CBC。因为我可以成功解密除最后一个字节之外的所有数据。
有一个客户端可以解密整个数据。我找到了解密器功能的asm代码。如果我理解正确,它就像这样:
x =缺陷块大小(x <16)
buffer =一个大小为(16 + x)
的数组有没有办法可以在.NET中解密这样的最后一个字节?
答案 0 :(得分:2)
您可能拥有使用密文窃取的CBC模式,可以实施cbc-cts with just a cbc implementation。
确保您的所有数据包都是密文。如果它的前缀是标题或可以通过你的长度和你的解密算法的东西,它不会抱怨前缀数据,它只会在到达结束之前解密为垃圾并抱怨填充。
如果使用authenticated encryption,使用mac对密文进行后缀也很常见,这也会给你一个非块长度倍数,但如果是这种情况你需要读取x个最后字节并验证在解密之前你的密文(常用的是HMAC)。
此外,您还要确保使用与密文源匹配的正确AES模式。有些AES模式不需要块大小,但无论如何它们通常都不支持内置的.net加密。