密碼加密的方式有: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演算法保護密碼
使用情況: ★★★☆☆
# # #########
3、特殊的單向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)來說微不足道。
##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 對記憶體進行了更多的傳遞,以防止權衡攻擊的發生。
Argon2d 是抵抗 GPU 破解攻擊的最安全選擇,並且Argon2 在 2015 年 7 月贏得了密碼哈希競賽。 Argon2d 使用依賴資料的記憶體訪問,這使得它很適合用於加密數位貨幣和工作量證明的應用程序,而不會受到側信道定時攻擊的威脅。
Argon2id 在記憶體第一次迭代的前半部充當 Argon2i,其餘部分則充當 Argon2d。因此,基於時間、 空間的平衡,它既提供了側通道攻擊保護也節約了暴力開銷。 如果你擔心側通道攻擊(例如:惡意資料快取載入/幽靈漏洞,它允許透過基於快取的側通道讀取同一硬體上其他正在運行的進程的私有記憶體資料),你應該使用Argon2i,否則使用Argon2d。如果你不確定或你對混合方法感到滿意,你可以使用 Argon2id 來獲得兩個方面的優勢。
原始程式碼可以在 Github 上取得,使用相容 C89 的 C 語言編寫,並在知識共享授權協議下取得許可,並且可以在大多數 ARM、x86 和 x64 架構的硬體上編譯。
…
###溫馨提醒######:###### 在2019 年之後,就有相關專家提出建議盡量不要使用PBKDF2 或BCrypt,並強烈建議將Argon2(最好是Argon2id)用於最新系統。而Scrypt 是 Argon2 不可用時的不二選擇,但要記住,它在側側通道洩漏方面也存在相同的問題。 ######更多相關知識,請造訪###常見問題###欄位! ###
以上是密碼加密的方式有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!