我正在用 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),任何关于算法细节的直截了当的文章都会非常有帮助。