MD5
MD5是一種被廣泛使用的密碼散列函數,不可逆(法從密文推出原文),但是HASH 算法最大的問題是,會發生撞庫,也就是說,有可能出現多個原文得到同一個密碼。
一種攻擊方法是,攻擊者記錄了一張巨大的密碼庫,預先計算了常用密碼的 hash 值,這樣只需要搜索 hash 值就能尋找到一個合適的密碼用於登錄。這就是被彩虹表攻擊。
解決彩虹表的問題是加鹽,在加密之前,對原文混入其他信息,混入的信息不存放到數據庫中。實際尋找到其他原文也無法登錄。
Bcrypt
Bcrypt 有兩個特點
1.每一次 HASH 出來的值不一樣
2.計算非常緩慢
因此使用 Bcrypt 進行加密后,攻擊者想要使用算出 M2 成本變得不可接受。但代價是應用自身也會性能受到影響,不過登錄行為並不是隨時在發生,因此能夠忍受。對於攻擊者來說,需要不斷計算,讓攻擊變得不太可能。
因此推薦使用 Bcrypt 進行密碼加密