在编码过程中,我使用了MD4和MD5加密技术。但他们之间并没有任何明显的安全差别。然而,他们中的大多数人更喜欢MD5,实际上是指定它。MD5:
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = null;
TDESKey = HashProvider.ComputeHash(UTF8.GetBytes("CXPUB001")); // ASYNC PRIVATE KEY CODE FOR DATA ENCRYPTION
//DATA ENCRYPTION
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey; //SENDER KEY APPENDED
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
byte[] DataToEncrypt = UTF8.GetBytes(Message);那么,在安全性方面,使用MD4和MD5有什么区别呢?
发布于 2014-10-27 10:16:24
MD4和MD5不是加密算法。它们是单向散列函数为密码学设计的。重要的是你要理解其中的区别。
MD5是MD4的一个稍加修改的版本,即稍微提高了它的安全性。
另一件很重要的事情是,这些功能在密码学中的使用都不安全:自90年代初起,MD4就一直是被认为非常不安全,而MD5自2000年初以来一直是不安全。
除非出于兼容性的原因,必须使用这些函数,否则不要在代码中使用它们,特别是MD4。
如果可以,可以使用沙二变体之一( .NET Framework 实现了所有这些),或者,如果不能,至少暂时使用沙一,这在理论上是脆弱的,但目前还没有实际的攻击。然而,您需要理解的是,对SHA-1的支持在许多系统中很快也会消失。
发布于 2014-10-27 18:51:11
他们中的大多数人更喜欢MD5,实际上是指定它
好吧,MD5只是一个破败的密码散列函数,而MD4是一个可笑的、异常破坏的密码散列函数。(3 3DES也有点坏了。)
然而,除了Stephane回答的背景之外:
HashProvider.ComputeHash(UTF8.GetBytes("CXPUB001"));= TDESKey
在您的示例中,MD4和MD5之间的区别可能并不重要,因为看起来您并不是为了加密目的而使用哈希。您只是将其用作实用的密钥派生函数,以便从可变长度的密码获得适合用作密钥材料的固定宽度的字节数组。
在这种情况下,哈希所提供的安全措施可能不会受到哈希弱点的影响。如果您确实希望这是一种安全措施(即,您预计攻击者可能拥有TDESKey,并且不希望他们能够快速从它派生"CXPUB001" ),那么您将需要一种比MD4或MD5强得多/慢得多的散列形式。
TDESAlgorithm.Mode = CipherMode.ECB;
是的,这听起来不太有希望,而且明显的缺乏签约也是如此。如果这是一个真正的应用程序,您可能应该考虑使用一些现有的好密码系统。参见引用的如果你在密码里输入字母A-E-S .,它的“坏”例子几乎就是您正在做的事情。
https://security.stackexchange.com/questions/71709
复制相似问题