什么是密码哈希?

18

什么是密码哈希?


8
你能否使用谷歌搜索一下?你可以详细说明一下你的问题吗?你是否在查看某个资源时有些不理解? - Frank V
4
@Frank:我已经改变了对这类问题的看法。它们缺乏深度让我很烦恼,但是如果我们忽略这一点,我们可以为“密码哈希”在谷歌上编写一个很好的着陆页。 - Michael Petrotta
@Michael,同意。此外,SO(Stack Overflow)正在建立一个声誉,即能够快速准确地回答你的编程问题。在这种情况下,这也是在维护这种声誉。 - Robert Greiner
@Frank 如果你搜索密码哈希,更有可能找到维基百科而不是Stack Overflow。这个太简单了。 - user140112
1
截至2009年10月21日,一个stackoverflow主题在密码哈希方面排名第二页:https://dev59.com/f3RC5IYBdhLWcg3wVvnL - Will Bickford
@Will 而且维基百科页面是第一页上的第二个链接 :) (并不是真的很重要) - user140112
3个回答

16

定义:
哈希 是将函数 f() 应用于可变大小的输入以产生恒定大小的输出。

A => f() => X
B => f() => Y
C => f() => Z

哈希函数是一种单向函数,这意味着没有反转或撤销哈希的函数。同时重复应用哈希 f(f(x)) 不会再次产生 x

详细信息:

哈希函数可以简单到“将输入加上13”,也可以复杂到像密码哈希(如MD5SHA1)这样的加密哈希。有许多东西构成了一个好的哈希函数,例如:

  • 低成本:易于计算
  • 确定性:如果我对输入 a 进行哈希处理多次,每次都会得到相同的输出
  • 均匀性:输入将在可能的输出之间平均分布。这符合鸽子洞原理的一些内容。由于输出数量有限,我们希望 f() 将这些输出平均放置而不是放在同一个桶中。当两个输入计算出相同的输出时,这称为碰撞。对于哈希函数来说,产生更少的碰撞是件好事。

哈希应用于密码:

密码哈希的过程与上述描述的过程相同,但需要考虑一些特殊情况。许多构成良好哈希函数的属性在密码方面并不有益。

例如,确定性,因为哈希产生确定性结果,当两个人使用相同的密码时,哈希在密码存储中看起来是相同的。这是不好的!但是,这可以通过一种称为的东西来缓解。

另一方面,均匀性是有益的,因为期望算法限制碰撞。

由于哈希是单向的,意味着无法从输出推断出输入,这就是为什么哈希很适合密码的原因!


15

接受一块数据并返回一个字符串,使得您无法恢复原始数据块。

维基百科文章

对密码进行哈希处理会对明文字符串执行算法(取决于哈希类型),以获得完全不同的值。这个值每次都是相同的,因此您可以在数据库中存储哈希密码,并将用户输入的密码与哈希值进行比较。

这样做可防止您将明文密码存储在数据库中(不好的想法)。

这里是哈希函数列表


我建议使用此链接http://en.wikipedia.org/wiki/Cryptographic_hash_function#Cryptographic_hash_algorithms 对于密码散列,应仅使用“加密哈希函数”,而不是例如CRC。 - Luka Rahne

7

哈希是一种单向函数,它将字符串或数据源转换为一个看起来像加密的字符串。

有各种哈希算法,最流行的是MD5,但还有许多其他算法。业内许多专家都使用SHA256算法以获得更好的安全性。

单词的MD5哈希值:

password是22e5ab5743ea52caf34abcc02c0f161d

PASSWORD是319f4d26e3c536b5dd871bb2c52e3178

无论您试图哈希多少个字符,结果的字符长度都将相同。哈希通常用于存储密码以防止其被查看。


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