本文小編為大家詳細介紹“Java MD5算法如何實現”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java MD5算法如何實現”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
哈希算法又稱散列算法,是將任何數據轉換成固定長度的算法的統稱。 從本質上講,MD5也是一種哈希算法,其輸出是生成128位的輸出結果。 如果輸入兩個不同的明文,就會輸出兩個不同的輸出值,并且根據輸出值,不能得到原始的明文,這個過程是不可逆的。
MD5算法對512位報文的輸入信息進行處理,每個報文被分成16個32位報文。 經過一系列處理后,算法的輸出由4個32位的數據包組成,這些數據包級聯生成一個128位的哈希值。
在MD5算法中,信息的填寫方式是這樣的:消息后面跟著一個1,然后是無數個0,直到512字節的剩余數等于448 (n*512) + 448。 為什么剩下的是448,因為剩下的512-448是64位,表示填充前的消息長度。 加上剩下的64位,(n+1)乘以512,也就是512的整數倍。
然后循環通過link變量獲得結果。 MD5包含四個32位整數參數,稱為鏈接變量:A=0x01234567, B= 0x89ABCdef, C= 0xFeDCba98, D=0x76543210。 一旦設置好四個鏈接變量,算法就開始了四輪循環。 具體的內部計算是關于數學的。如果你感興趣,你可以自己理解。這里沒有更多的解釋。
/**
* 用MD5算法進行加密
* @param str 需要加密的字符串
* @return MD5加密后的結果
* @throws UnsupportedEncodingException
*/
public static String encodeMD5String(String str) {
return getMD5(str);
} /**
* MD5編碼方法, 該方法存在漏洞,特殊情況下編碼后的字符串只有31位長度
* @param str
* @param method
* @return
* @throws UnsupportedEncodingException
*/
private static String encode(String str, String method) throws UnsupportedEncodingException {
MessageDigest md = null;
String dstr = null;
try {
md = MessageDigest.getInstance(method);
md.update(str.getBytes("UTF-8"));
dstr = new BigInteger(1, md.digest()).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return dstr;
}/**
* MD5編碼方法
* @param message
* @return
*/
public static String getMD5(String message) {
MessageDigest messageDigest = null;
StringBuffer md5StrBuff = new StringBuffer();
try {
messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(message.getBytes("UTF-8"));
byte[] byteArray = messageDigest.digest();
for (int i = 0; i < byteArray.length; i++)
{
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
else
md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
}
} catch (Exception e) {
throw new RuntimeException();
}
return md5StrBuff.toString().toUpperCase();//字母大寫
} /**
* 加密
* @param content
* @return
*/
public static String encrypt(String content) {
String password = "12345678dd";
byte[] encryptResult = encrypt(content, password);
String encryptResultStr = parseByte2HexStr(encryptResult);
return encryptResultStr;
}/**
* 加密
* @param content
* @param password
* @return
*/
public static String encryptStr(String content, String password) {
byte[] encryptResult = encrypt(content, password);
return parseByte2HexStr(encryptResult);
}/**
* 解密
* @param encryptResultStr
* @return
* @throws UnsupportedEncodingException
*/
public static String decrypt(String encryptResultStr) throws UnsupportedEncodingException {
String password = "12345678dd";
byte[] decryptFrom = parseHexStr2Byte(encryptResultStr);
byte[] decryptResult = decrypt(decryptFrom, password);
// 解密內容進行解碼
String result = new String(decryptResult, UTF8);
return result;
}/**
* 解密
* @param encryptStr
* @param password
* @return
* @throws UnsupportedEncodingException
*/
public static String decryptStr(String encryptStr, String password) throws UnsupportedEncodingException {
byte[] decryptFrom = parseHexStr2Byte(encryptStr);
byte[] decryptResult = decrypt(decryptFrom, password);
// 解密內容進行解碼
return new String(decryptResult, UTF8);
}讀到這里,這篇“Java MD5算法如何實現”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。