繁体   English   中英

C#中TripleDES CFB上的16位块大小

[英]16-bit Block Size on TripleDES CFB in C#

我正在用C#编写一个需要解密某些传统软件加密的数据的应用程序。 遗留代码以8块的未加密字节循环,并在CBC模式下通过TripleDES加密它们。 然后,它使用TripleDES CFB处理剩余字节,使用剩余量的块大小(在此特定情况下为2)。

我可以使用System.Security.Cryptography.TripleDES解密C#中第一阶段的数据,因为它允许64位(8字节)的块大小。 到了TripleDes类将不允许的16位的块尺寸,但是。 以下代码抛出一个错误,指出“指定的块大小对此算法无效”:

TripleDES provider = TripleDESCryptoServiceProvider.Create();
provider.Mode = CipherMode.CFB;
provider.BlockSize = 16; // exception thrown here

由于小块尺寸的弱性,我假设这已经到位。 不幸的是,这是我坚持的。 是否有任何免费的第三方库可能支持TripleDES / CFB的16位块大小? 或者,我可以在此数据集上使用任何技巧来使其工作吗? 我检查了DES类,看看它是否支持16位块大小,但没有骰子......

我不是加密专家,所以如果我最终必须为TripleDES推出自己的代码(超过2个字节...... grrr),任何关于算法细节的直接文章都会非常有用。

一种可能性是明文的最后两个字节与最终加密的密码块的两个字节简单地进行异或,并且其余部分被丢弃。 使用.NET类来获取此行为应该很简单。

  1. 将blocksize设置为64位。
  2. 将模式设置为CFB。
  3. 将反馈大小设置为64位
  4. 将输入填充为8个字节的倍数。 使用什么填充并不重要,因为你要丢掉额外的数据。
  5. 转换块。
  6. 扔掉残留物。

虽然MSDN表示你可以通过该属性设置块大小,但我认为为3DES设置16位块大小是不可能的,因为DES(和3DES)只是为了使用64位块而创建的。

我想传统软件使用一些填充方案来加密最后一个块。 通常它用随机值填充剩余的字节,并将这些不需要的字节数保存到最后一个字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM