散列密码和加密之间的区别

目前投票支持这个问题的人指出:

另一个并不是安全问题,尽管它是与安全有关的,但完全并且可能无法克服散列密码和加密密码之间的差异 。 最常见的代码是程序员试图提供不安全的“提醒我的密码”功能。

这个区别究竟是什么? 我总是觉得哈希是一种加密的形式。 海报所指的不安全功能是什么?


散列是一种单向函数(嗯,映射)。 这是不可逆的,你应用安全哈希算法,你不能得到原始字符串。 你能做的最多的是产生所谓的“碰撞”,即找到一个提供相同散列的不同字符串。 加密安全的散列算法旨在防止发生冲突。 您可以使用彩虹表攻击安全散列,在存储散列表之前,您可以通过对散列应用盐来抵消这种散列表。

加密是一个适当的(双向)功能。 它是可逆的,如果你有密钥的话,你可以解密被损坏的字符串以获得原始字符串。

它指的不安全功能是,如果您加密密码,则应用程序将密钥存储在某处,并且访问数据库(和/或代码)的攻击者可以通过获取密钥和加密文本来获取原始密码,而使用哈希是不可能的。

人们通常会说,如果一个破解者拥有你的数据库或你的代码,他不需要密码,所以这个区别是没有意义的。 这是天真的,因为你仍然有责任保护你的用户的密码,主要是因为他们大多数都一遍又一遍地使用相同的密码,泄露他们的密码使他们面临更大的风险。


散列是一种单向函数,这意味着一旦你散列了密码,就很难从散列中获得原始密码。 加密是一种双向功能,从加密文本中获取原始文本要容易得多。

使用字典攻击很容易击败简单散列,攻击者只需在字典中预先散列每个单词(或每个字符的组合),然后使用这个新字典查找散列密码。 对存储的每个哈希密码使用唯一的随机盐使得攻击者使用此方法更加困难。 他们基本上需要为您使用的每个盐值创建一个新的独特字典,这会极大地减缓他们的攻击速度。

使用加密算法存储密码是不安全的,因为如果用户或管理员更容易从加密文本中获取原始密码,攻击者也可以更容易地执行相同操作。


我一直认为Encryption可以通过两种方式进行转换,最终值可以带来原始价值,而使用哈希将无法从最终结果恢复到原始值。

链接地址: http://www.djcxy.com/p/21533.html

上一篇: Difference between Hashing a Password and Encrypting it

下一篇: How can I store my users' passwords safely?