C# 对 TripleDES 算法的实现
Posted
技术标签:
【中文标题】C# 对 TripleDES 算法的实现【英文标题】:C#'s implementation of the TripleDES algorithm 【发布时间】:2012-09-02 12:38:14 【问题描述】:我正在实现一个应用程序,该应用程序需要使用大小为 112 位(14 字节)的密钥的 TripleDES 加密,这在 C# 中是可能的,因为文档指出该算法仅允许 128-192 位范围内的密钥。
【问题讨论】:
我想知道如果你用零字节填充 112 位密钥以使其成为 128 会发生什么。 【参考方案1】:128 位密钥大小是 112 位版本。对于每个 64 位 DES 密钥,8 位是奇偶校验位。
[编辑:以下段落来自对上述问题的错误阅读,它是双键 TripleDES 而不是 DoubleDES。感谢 GregS 指出这一点。]
还要注意,由于meet in the middle 攻击,双重 DES 并不比普通 DES 更强。仅使用双 DES 以实现向后兼容性。在大多数情况下考虑使用 AES(或在 TLS 1.1 之前用于 SSL 的旧 RC4。或更好的 BEAST 攻击保护更为普遍)。
【讨论】:
Wikipedia 与您的第二段相矛盾:“此选项比简单的 DES 加密两次更强,例如使用 K1 和 K2,因为它可以防止中间相遇攻击。”知道为什么吗? @JonSkeet 它进行了两轮加密,所以是的,暴力破解需要更长的时间。但是,如果您可以同时访问密文和明文,则中间人攻击是可能的,并且几乎将保护减半。这就是为什么使用 TripleDES 而不是 DoubleDES。 @GregS,是的,你是对的。我误读了原来的问题。我会修正我的答案。 所以我收到了 14 个字节用作网络上的 DES 密钥,如何使它们与您的解释一起工作,我应该填充密钥,我应该自己设置奇偶校验位,还是怎么办? @Sniffer TripleDES 可以在两键或三键模式下运行,因此您之前没有错。与大多数加密技术一样,它比您(、我和其他所有人)最初想象的要复杂。以上是关于C# 对 TripleDES 算法的实现的主要内容,如果未能解决你的问题,请参考以下文章
多语言(Java&C#&Ruby&C++&Objective-C&Android)互通的TripleDES加解密算法实现
加密算法:AES DES RC4 Rabbit TripleDes 那个更好??它们分
TripleDES 加密在 c# 和 PHP 中没有得到相同的结果
记一次漏洞修复:DES和Triple DES 信息泄露漏洞(CVE-2016-2183)