我正在用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),任何关于算法细节的直接文章都会非常有帮助。< / p>
答案 0 :(得分:2)
一种可能性是明文的最后两个字节与最终加密密码块的两个字节简单地进行异或,并且剩余部分被丢弃。使用.NET类来获取此行为应该很简单。
答案 1 :(得分:0)
虽然MSDN说您可以通过该属性设置块大小,但我认为为3DES设置16位块大小是不可能的,因为DES(和3DES)只是为了使用64位块而创建。
我猜传统软件使用一些填充方案来加密最后一个块。通常它用随机值填充剩余的字节,并将这些不需要的字节数保存到最后一个字节。