密碼加密的方式有:1、利用對稱加密算法(例如3DES、AES)進行加密,使用這種方式加密是可以通過解密來還原出原始密碼的,當然前提條件是需要獲取到密鑰;2、使用單向HASH算法(例如MD5、SHA1)進行密碼,但無法通過計算還原出原始密碼;3、使用特殊的單向HASH算法進行密碼;4、使用PBKDF2算法進行加密;5、使用BCrypt算法進行加密;6、用SCrypt算法進行加密。
本教程操作環境:windows7系統、DELL G3電腦
作為一名Web開發人員,我們經常需要與用戶的帳號系統打交道,而這其中最大的挑戰就是如何保護用戶的密碼。密碼是一個網站系統最重要的護盾,如果把網站系統比作城堡,那密碼就是城門。關于如何安全的存儲密碼以及使用何種算法總是有很多的爭論:MD5、SHA1,SHA256、PBKDF2,Bcrypt、Scrypt、Argon2、明文??
常見的7種密碼加密方式
??我們該采用什么方式來保護用戶的密碼呢?以下幾種方式是常見的密碼保存方式:
算法 | 特點 | 有效破解方式 | 破解難度 | 其它 |
---|---|---|---|---|
對稱加密 | 可以解密出明文 | 獲取密鑰 | 中 | 需要確保密鑰不泄露 |
單向HASH | 不可解密 | 碰撞、彩虹表 | 中 | |
特殊HASH | 不可解密 | 碰撞、彩虹表 | 中 | 需要確保“鹽”不泄露 |
Pbkdf2 | 不可解密 | 無 | 難 | 需要設定合理的參數 |
BCrypt | 不可解密 | 無 | 難 | 需要設定合理的參數 |
SCrypt | 不可解密 | 無 | 難 | 需要設定合理的參數 |
Argon2 | 不可解密 | 無 | 難+ |
1、使用對稱加密算法來保存
使用情況: ★★☆☆☆
??比如3DES、AES等算法,使用這種方式加密是可以通過解密來還原出原始密碼的,當然前提條件是需要獲取到密鑰。不過既然大量的用戶信息已經泄露了,密鑰很可能也會泄露,當然可以將一般數據和密鑰分開存儲、分開管理,但要完全保護好密鑰也是一件非常復雜的事情,所以這種方式并不是很好的方式。
對稱加密
明文
密文
對稱解密
密文
明文
2、使用MD5、SHA1等單向HASH算法保護密碼
使用情況: ★★★☆☆
??使用這些算法后,無法通過計算還原出原始密碼,而且實現比較簡單,因此很多互聯網公司都采用這種方式保存用戶密碼,曾經這種方式也是比較安全的方式,但隨著彩虹表技術的興起,可以建立彩虹表進行查表破解,目前這種方式已經很不安全了。
HASH算法
明文
密文
無法還原
密文
明文
3、特殊的單向HASH算法
使用情況: ★★★☆☆
??由于單向HASH算法在保護密碼方面不再安全,于是有些公司在單向HASH算法基礎上進行了加鹽、多次HASH等擴展,這些方式可以在一定程度上增加破解難度,對于加了“固定鹽”的HASH算法,需要保護“鹽”不能泄露,這就會遇到“保護對稱密鑰”一樣的問題,一旦“鹽”泄露,根據“鹽”重新建立彩虹表可以進行破解,對于多次HASH,也只是增加了破解的時間,并沒有本質上的提升。
HASH算法
鹽+明文
密文
無法還原
密文
明文
4、PBKDF2
使用情況: ★★★★☆
??該算法原理大致相當于在HASH算法基礎上增加隨機鹽,并進行多次HASH運算,隨機鹽使得彩虹表的建表難度大幅增加,而多次HASH也使得建表和破解的難度都大幅增加。使用PBKDF2算法時,HASH算法一般選用sha1或者sha256,隨機鹽的長度一般不能少于8字節,HASH次數至少也要1000次,這樣安全性才足夠高。一次密碼驗證過程進行1000次HASH運算,對服務器來說可能只需要1ms,但對于破解者來說計算成本增加了1000倍,而至少8字節隨機鹽,更是把建表難度提升了N個數量級,使得大批量的破解密碼幾乎不可行,該算法也是美國國家標準與技術研究院推薦使用的算法。
??PBKDF2 已經存在很長時間了,像之前文章討論的一樣,它有點過時了:輕松的在多核系統(GPU)上實現并行,這對于定制系統(FPGA/ASIC)來說微不足道。
多次HASH算法
隨機鹽+明文
密文
無法還原
密文
明文
5、BCrypt
使用情況: ★★★★☆
??BCrypt 在1999年就產生了,并且在對抗 GPU/ASIC 方面要優于 PBKDF2,但是我還是不建議你在新系統中使用它,因為它在離線破解的威脅模型分析中表現并不突出。 盡管有一些數字加密貨幣依賴于它(即:NUD),但它并沒有因此獲得較大的普及,因此,FPGA/ASIC 社區也并沒有足夠的興趣來構建它的硬件實現。 話雖如此,Solar Designer(OpenWall)、Malvoni 和 Knezovic(薩格勒布大學)在 2014 年撰寫了一篇論文,這篇文章描述了一種混合使用 ARM/FPGA 的單片系統來攻擊該算法。
6、SCrypt
使用情況: ★★★★☆
??SCrypt 在如今是一個更好的選擇:比 BCrypt設計得更好(尤其是關于內存方面)并且已經在該領域工作了 10 年。另一方面,它也被用于許多加密貨幣,并且我們有一些硬件(包括 FPGA 和 ASIC)能實現它。 盡管它們專門用于采礦,也可以將其重新用于破解。
7、Argon2
使用情況: ★★★★★
??Argon2 基于 AES 實現,現代的 x64 和 ARM 處理器已經在指令集擴展中實現了它,從而大大縮小了普通系統和攻擊者系統之間的性能差距,
??Argon2 有三個主要的版本:
- Argon2i 是對抗側信道攻擊的最安全選擇,Argon2i 使用與數據無關的內存訪問,這是密碼哈希的首選方法,Argon2i 對內存進行了