幾年前國內一家大型的開發者論壇數據泄露,其中用戶密碼居然是以明文方式保存的,很不幸個人經常使用密碼在那時候被泄露了。這件事足以證實咱們在保存用戶密碼的時候是不能用明文保存的。那麼問題來了,用什麼樣的方法加密密碼才安全呢?下面介紹一些常見的加密用戶密碼的算法。算法
你可能不止一次聽到過相似「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日成爲有效的標準。如今,高級加密標準已然成爲對稱密鑰加密中最流行的算法之一。code
RSA算法:RSA加密算法是一種非對稱加密算法,在公開密鑰加密和電子商業中被普遍使用。RSA是由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)在1977年一塊兒提出的。當時他們三人都在麻省理工學院工做。RSA 就是他們三人姓氏開頭字母拼在一塊兒組成的。開發
這幾種算法有個特色就是能夠被解密,在實踐過程當中使用這種算法對項目的後期維護會增長不少便利。要注意DES算法已經被證實不是一種安全的方法,儘可能不要在新項目中使用。字符串
相似base6四、base62這種算法是對數據進行編碼的方式,只是修改了數據表現方式,並無加密功能。通常用來配合其餘算法使用。
最後仍是要說安全無小事,咱們在項目開發中仍是要儘可能的注意數據安全的問題,避免形成沒必要要的麻煩。
文章出處:文本加密:常見的密碼加密解密方法