MD5算法是否总是为相同的字符串生成相同的输出?

36

MD5算法对于相同的字符串,生成的输出是否总是相同的?

除了使用盐值,还有其他方法可以产生不同的输出吗?


2
你能解释一下为什么你这样问吗?看起来你想要另一种行为,有什么原因吗? - Scott Stafford
1
这是一个确定性算法。它怎么可能做不同的事情呢? - President James K. Polk
我不熟悉加密和哈希之间的区别。我认为我把RC5也搞混了。 - vfclists
6个回答

44

是的,否则对于像文件验证之类的事情,MD5将毫无用处。你有什么非确定性输出的理由吗?


2
我对“你有什么理由产生非确定性输出”的笑话感到好笑,因为这正是我的想法。然而,显然.NET的GetHashCode()是非确定性的,至少在应用程序运行之间是这样的。 - emery.noel
在C#中,MD5是一个接口,而MD5CryptoServiceProvider和MD5Cng是两个独立的实现。如果它们都是确定性的,那就很奇怪了。 - Mooing Duck

14

是的,MD5会始终在相同输入时输出相同的值。这正是它用于密码的原因。您可以将哈希存储在数据库中,然后当用户输入其密码时,再次进行哈希处理并比较两个哈希值。

注意:不建议使用MD5来哈希密码,因为它在密码学上很弱。现有更适合的密码学哈希函数,如bcrypt。然而,从历史上看,它曾经被用于此目的。


MD5不应该被用于密码,绝对不行。 - mavnaranjo
1
@mavnaranjo:不认为这应该被投反对票。我没有错,那是5年前的事了。它曾经被用于密码,尽管可能不安全,但仍然是一个有效的说明点,因为你知道它具有不变的输出。不过,我会添加一个编辑来说明这一点。 - Scott Stafford

8

是的,哈希算法总是产生相同的输出。如果您使用相同的盐,这也将始终为给定输入产生相同的输出。


1

是的,MD5是确定性的,对于许多消息摘要函数的应用来说,这被认为是一种理想的特性。

至于使用盐,你真正意思的是“以某种微妙的方式改变输入字符串”,对吧?当然,消息摘要的一个理想特性也是它们(极有可能)为不同的消息产生不同的摘要。


0

是的。尽管在某些情况下,它会为不同的字符串创建相同的哈希。


很抱歉,相同的答案早在9年前就已经出现了。 - Pochmurnik

0

是的。MD5是一种哈希函数。

这并不意味着MD5是唯一的。多个输入可能映射到相同的哈希值,但任何给定的输入只有一个哈希值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接