前言
幾年前國內一家大型的開發者論壇資料洩露,其中使用者密碼竟然是以明文方式儲存的,很不幸我的常用密碼在那時候被洩露了。這件事足以證明我們在儲存使用者密碼的時候是不能用明文儲存的。那麼問題來了,用什麼樣的方法加密密碼才安全呢?下面介紹一些常見的加密使用者密碼的演算法。
雜湊函式 HASH
你可能不止一次聽到過類似“MD5加密密碼”或者“SHA1加密密碼”等說法。這裡面其實有一個誤區MD5之類的演算法是一種不可逆的演算法,也就是說沒有辦法解密。這種演算法有個統一的名字:雜湊函式。維基百科給出瞭解釋:
雜湊函式(英語:Hash function)又稱雜湊演算法、雜湊函式,是一種從任何一種資料中建立小的數字“指紋”的方法。雜湊函式把訊息或資料壓縮成摘要,使得資料量變小,將資料的格式固定下來。該函式將資料打亂混合,重新建立一個叫做雜湊值(hash values,hash codes,hash sums,或hashes)的指紋。雜湊值通常用一個短的隨機字母和數字組成的字串來代表。好的雜湊函式在輸入域中很少出現雜湊衝突。在雜湊表和資料處理中,不抑制衝突來區別資料,會使得資料庫記錄更難找到。
雜湊函式有如下特性:不可以從訊息摘要中復原資訊;兩個不同的訊息不會產生同樣的訊息摘要。
MD5 SHA1 SHA256這些都是雜湊函式。由於現代計算機算力越來越強大對MD5進行碰撞試驗的成本越來越低,目前來說直接儲存密碼的MD5值已經不再安全了,但並不是說明MD5本身有問題,如果使用MD5儲存使用者密碼的話可以對密碼進行多次MD5,這樣我們的程式依然是安全的。還有MD5在驗證資料完整性的應用上也具有一定的優勢。
SHA1和SHA256屬於一類演算法SHA的不同版本,SHA1是SHA的較舊版本,可生成160位雜湊值,而SHA256是SHA2的一種型別,可生成256位雜湊值。更推薦使用SHA256,畢竟新版本安全性更高一些。
加密解密
DES演算法:資料加密標準(英語:Data Encryption Standard,縮寫為 DES)是一種對稱金鑰加密塊密碼演算法,1976年被美國聯邦政府的國家標準局確定為聯邦資料處理標準(FIPS),隨後在國際上廣泛流傳開來。它基於使用56位金鑰的對稱演算法。這個演算法因為包含一些機密設計元素,相對短的金鑰長度以及懷疑內含美國國家安全域性(NSA)的後門而在開始時有爭議,DES因此受到了強烈的學院派式的審查,並以此推動了現代的塊密碼及其密碼分析的發展。
AES演算法: 高階加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。經過五年的甄選流程,高階加密標準由美國國家標準與技術研究院(NIST)於2001年11月26日釋出於FIPS PUB 197,並在2002年5月26日成為有效的標準。現在,高階加密標準已然成為對稱金鑰加密中最流行的演算法之一。
RSA演算法:RSA加密演算法是一種非對稱加密演算法,在公開金鑰加密和電子商業中被廣泛使用。RSA是由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)在1977年一起提出的。當時他們三人都在麻省理工學院工作。RSA 就是他們三人姓氏開頭字母拼在一起組成的。
這幾種演算法有個特點就是可以被解密,在實踐過程中使用這種演算法對專案的後期維護會增加很多便利。要注意DES演算法已經被證明不是一種安全的方法,儘量不要在新專案中使用。
編碼
類似base64、base62這種演算法是對資料進行編碼的方式,只是修改了資料表現方式,並沒有加密功能。一般用來配合其他演算法使用。
最後還是要說安全無小事,我們在專案開發中還是要儘量的注意資料安全的問題,避免造成不必要的麻煩。
文章出處:文字加密:常見的密碼加密解密方法