APP開發實戰40-MD5介紹
12 加密介紹
12.1MD5簡介
MD5即Message-Digest Algorithm5(資訊-摘要演算法5),用於確保資訊傳輸完整一致。是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、雜湊演算法)。MD5的作用是讓大容量資訊在用數字簽名軟體簽署私人金鑰前被"壓縮"成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的十六進位制數字串)。
MD5演算法具有以下特點:
(1)根據最終輸出的值,無法得到原始的明文,即過程是不可逆的。
(2)任意長度的資料,算出的MD5值長度都是固定的。
Java提供了MD5加密的庫,如下所示是對資料進行MD5加密處理的程式碼:
import
import java.security.NoSuchAlgorithmException;
private String makeMD5Hash(String key) {
String cacheKey;
try {
final MessageDigestmDigest = MessageDigest.getInstance("MD5");
mDigest.reset();
mDigest.update(key.getBytes());
cacheKey = bytesToHexString(mDigest.digest());
} catch
cacheKey = String.valueOf(key.hashCode());
}
return cacheKey;
}
private String bytesToHexString(byte[]bytes) {
StringBuilder sb = new StringBuilder();
for (byte
value : bytes) {
String hex = Integer.toHexString(0xFF
&value);
if
sb.append('0');
}
sb.append(hex);
}
return sb.toString();
}
MD5主要用於需要對原始資料加密,但資料的使用方又不需要知道原始資料的場景,而且還可用於資料完整性校驗:
(1)對登入密碼進行加密
如使用者使用APP註冊的時候,APP把使用者輸入的密碼進行MD5 Hash運算,然後傳送給伺服器儲存。使用者使用APP登入的時候,伺服器把從APP接收到的MD5值和儲存的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,伺服器在並不知道使用者密碼的明碼的情況下就可以確定使用者登入的合法性。這可以避免使用者的密碼被具有系統管理員許可權的人員知道。
(2)對檔名進行加密
在使用APP的時候,常需要在本地快取一些檔案,可以使用MD5對這些檔名進行加密,防止通過檔名瞭解檔案的相關資訊。
(3)資料完整性的校驗
常常在某些軟體下載站點的某軟體資訊中看到其MD5值,它的作用就在於下載該軟體後,對下載的檔案用專門的軟體(如Windows MD5 Check等)做一次MD5校驗,以確保獲得的檔案與該站點提供的檔案為同一檔案。
具體來說檔案的MD5值就像是這個檔案的“數字指紋”。每個檔案的MD5值是不同的,如果任何人對檔案做了任何改動,其MD5值也就是對應的“數字指紋”就會發生變化。比如下載伺服器針對一個檔案預先提供一個MD5值,使用者下載完該檔案後,用演算法重新計算下載檔案的MD5值,通過比較這兩個值是否相同,就能判斷下載的檔案是否出錯,或者說下載的檔案是否被篡改了。
為了增加解密的難度,有時會採用加鹽的方式,就是在明文資料中加入一個隨機字串,如當前操作的時間字串,然後再用MD5演算法加密。