1. 程式人生 > >Java最常用的幾種加密演算法

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的串。就是用來驗證檔案是否一致的。

小編相信這裡有很多學習java的朋友,小編整理了一份java方面的學習資料,想要獲取的可以加我的java學習群的喲,928204055。歡迎愛學習Java的你們。

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資料庫,也是比較容易解密出使用者原來的密碼資訊。對稱加密演算法,對稱加密演算法破解起來有一定的難度,但是關於這種加密演算法有一個缺陷就是,客戶端也需要進行加密,通過反編譯或者檢視網頁原始碼等方式,也能夠推算出加密演算法,所以也存在著一定的風險性。基於以上出現的種種原因,採用非對稱加密演算法是一個非常不錯的選擇。