首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解密大小不是块大小倍数的数据?

如何解密大小不是块大小倍数的数据?
EN

Stack Overflow用户
提问于 2013-03-08 09:55:10
回答 1查看 4.2K关注 0票数 1

我正在尝试用AESManaged或RijndaelManaged在VB.NET中解密和加密数据。我有一个大小不是块大小的倍数的数据包。在这种情况下,当我试图解密时,它会产生错误,因为“要解密的数据的长度无效”。只有在删除数据末尾的缺陷块时,我才能解密它。但我要知道最后一条街到底是什么。

所以

是否有可能解密大小不是块大小倍数的数据?

如果是的话,我怎么做呢?

编辑:

有些信息我忘了写。

分组密码模式必须是CBC。因为我可以成功地解密除最后一个字节之外的所有数据。

有一个客户端可以解密整个数据。我找到了解密函数的asm代码。如果我理解得对,它的工作方式是这样的:

X=缺块大小(x < 16)

缓冲区=大小为(16 + x)的数组

  • 首先,函数获取之前未解密的字节,并将其放入缓冲区的前16个字节。(16字节)
  • 将未解密的最后字节追加到缓冲区。(x字节)
  • 从bufferx解密到缓冲区的末尾,并将结果放到相同的位置。(最后16字节的缓冲区)
  • 从缓冲区解密到buffer15,并将结果放到相同的位置。(缓冲区的前16字节)
  • 如您所知,CBC xors使用以前解密的字节对字节进行解密。因此,函数xors第一个x字节的缓冲区和最后x字节的缓冲区。

有办法在.NET中解密像这样的最后字节吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-08 13:37:00

更新:

您可能有一个CBC模式与密文窃取,这是可能的实现只使用cbc实现的cbc-cts

原件:

确保所有的数据包都是密文。如果它的前缀是一个标题或什么东西,可以通过您的长度和解密算法,它不会抱怨前缀数据,它只会解密到垃圾,然后才结束,并抱怨填充。

如果使用认证加密,通常也会使用mac对密文进行后缀,这也会给您提供一个非块长度的倍数,但如果是这样,则需要在解密前读取x最后一个字节并验证您的密文(通常使用的是HMAC)。

此外,要确保您使用的是正确的AES模式,该模式与您的密文源相匹配。有些AES模式不需要块大小倍数,但在内置的.net密码系统中通常不支持它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15291176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档