散列是一個單向函數(嗯,映射)。這是不可逆轉的,您應用了安全哈希算法,并且無法獲得原始字符串。您能做的最多就是生成所謂的“沖突”,即找到提供相同哈希的不同字符串。密碼安全散列算法是為了防止沖突的發生而設計的。可以通過使用彩虹臺,您可以通過應用食鹽在存儲哈希之前。
加密是一種適當的(雙向)功能。這是可逆的,你可以解密損壞的字符串,以獲得原始字符串,如果你有密鑰。
它所指的不安全功能是,如果您加密密碼,您的應用程序將密鑰存儲在某個地方,訪問數據庫(和/或代碼)的攻擊者可以通過獲取密鑰和加密文本獲得原始密碼,而使用哈希則是不可能的。
人們通常說,如果破解者擁有您的數據庫或代碼,他不需要密碼,因此差別是沒有意義的。這是幼稚的,因為你仍然有責任保護你的用戶的密碼,主要是因為他們中的大多數確實一遍又一遍地使用相同的密碼,通過泄露他們的密碼使他們面臨更大的風險。