散列是一个单向函数(嗯,映射)。这是不可逆转的,您应用了安全哈希算法,并且无法获得原始字符串。您能做的最多就是生成所谓的“冲突”,即找到提供相同哈希的不同字符串。密码安全散列算法是为了防止冲突的发生而设计的。可以通过使用彩虹台,您可以通过应用食盐在存储哈希之前。
加密是一种适当的(双向)功能。这是可逆的,你可以解密损坏的字符串,以获得原始字符串,如果你有密钥。
它所指的不安全功能是,如果您加密密码,您的应用程序将密钥存储在某个地方,访问数据库(和/或代码)的攻击者可以通过获取密钥和加密文本获得原始密码,而使用哈希则是不可能的。
人们通常说,如果破解者拥有您的数据库或代码,他不需要密码,因此差别是没有意义的。这是幼稚的,因为你仍然有责任保护你的用户的密码,主要是因为他们中的大多数确实一遍又一遍地使用相同的密码,通过泄露他们的密码使他们面临更大的风险。