Java中常見的幾種加密算法


1. BASE64

Base64是網絡上最常見的用於傳輸8Bit字節代碼的編碼方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的詳細規范。Base64編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就采用了Base64來將一個較長的唯一標識符(一般為128-bit的UUID)編碼為一個字符串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,采用Base64編碼具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。

2. MD5

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現。將數據(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理,MD5的前身有MD2、MD3和MD4。廣泛用於加密和解密技術,常用於文件校驗。校驗?不管文件多大,經過MD5后都能生成唯一的MD5值。好比現在的ISO校驗,都是MD5校驗。怎么用?當然是把ISO經過MD5后產生MD5的值。一般下載linux-ISO的朋友都見過下載鏈接旁邊放着MD5的串。就是用來驗證文件是否一致的。

3.SHA

安全哈希算法(Secure Hash Algorithm)主要適用於數字簽名標准(Digital Signature Standard DSS)里面定義的數字簽名算法(Digital Signature Algorithm DSA)。對於長度小於2^64位的消息,SHA1會產生一個160位的消息摘要。該算法經過加密專家多年來的發展和改進已日益完善,並被廣泛使用。該算法的思想是接收一段明文,然后以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。散列函數值可以說是對明文的一種"指紋"或是"摘要"所以對散列值的數字簽名就可以視為對此明文的數字簽名。

4.HMAC

HMAC(Hash Message Authentication Code,散列消息鑒別碼,基於密鑰的Hash算法的認證協議。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然后傳輸。接收方利用與發送方共享的密鑰進行鑒別認證等。

我們為什么要使用加密算法,分析用戶登錄時密碼安全問題的演變過程:

明文存儲,這是一種最簡單的存儲方式,但是有着很大的安全隱患,首先密碼暴露在網絡傳輸的過程中,很容易被黑客攔截,其次如果服務器的數據庫被脫庫后,所有用戶的密碼一覽無余,最后不稱職的系統管理員可以很容易拿到用戶登錄密碼,進行一些非法的交易,如果這個用戶所有的密碼都是一樣的話,那么這個用戶算是完蛋了。

所以后來演變為使用MD5來存儲密碼,但是這樣也會出現問題,因為只要密碼在網絡中傳輸都有可能被黑客攔截,互聯網上有着各種各樣的MD5數據庫,也是比較容易解密出用戶原來的密碼信息。對稱加密算法,對稱加密算法破解起來有一定的難度,但是關於這種加密算法有一個缺陷就是,客戶端也需要進行加密,通過反編譯或者查看網頁源碼等方式,也能夠推算出加密算法,所以也存在着一定的風險性。基於以上出現的種種原因,采用非對稱加密算法是一個非常不錯的選擇。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM