当前得票最高的是this question状态:

Another one that's not so much a security issue, although it is security-related, is complete and abject failure to grok the difference between hashing a password and encrypting it. Most commonly found in code where the programmer is trying to provide unsafe "Remind me of my password" functionality.

这个区别到底是什么?我一直认为散列是加密的一种形式。发帖者指的不安全功能是什么?

请您参考如下方法:

散列是一种单向函数(好吧,是一种映射)。这是不可逆的,您应用安全哈希算法,并且无法取回原始字符串。您最多能做的就是生成所谓的“冲突”,即找到提供相同哈希值的不同字符串。加密安全哈希算法旨在防止冲突的发生。您可以使用 rainbow table 来攻击安全哈希。 ,您可以通过应用 salt 来抵消。在存储之前先对其进行哈希处理。

加密是一种正确的(双向)功能。它是可逆的,如果你有 key ,你可以解密损坏的字符串以获得原始字符串。

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

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


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!