很多系統都是將密碼進行一次 MD5 或 SHA1 Hash后存入數據庫中。這樣的密碼抵擋不住字典攻擊。所謂字典攻擊,就是將常用密碼進行Hash后做成一個字典,破解的時候,只需要查字典就能知道對應的明文密碼。
為了抵御字典攻擊,推薦的做法是使用 密碼 + 鹽(一串隨機數) 再Hash的方式。每個密碼對應一個不同的隨機數。這個方法,實際上是將密碼人為地拓展了N位,導致密碼長度大增,使得攻擊者無法構造這么大的一個字典。
使用 密碼 + 隨機串 的方式保存的密碼就一定不能破解嗎?設想這種方式的數據庫表中一定有兩列,一列保存 隨機串,另一列保存 密碼 + 隨機串 的Hash值。如果攻擊者拿到這個數據庫,會怎樣做呢?他可以對每一個密碼構建一個字典,然后再查字典破解。實際上,要破解一個密碼所構造的字典並不很大,跟不用隨機串是一樣的!只不過這字典是一次性字典。
破解每一個密碼都要構造一個字典,雖然較慢,但並不是不可能。
因此,最終的解決方案還是回歸到限制密碼最小長度和使用復雜密碼上來。
