MD5算法原理:
MD5以512位分組來處理輸入的信息,且每一分組又被劃分爲16個32位子分組,經過了一系列的處理後,
算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值
MD5加密算法功能:
1.輸入任意長度的信息,經過處理,輸出爲128位的信息(數字指紋);
2.不同的輸入得到的不同的結果(唯一性);
3.根據128位的輸出結果基本不可能反推出輸入的信息(不可逆)
MD5加密方法一:
import java.security.*;
public class MD5{
//定義 String 數組,存儲16進制的基本字符
private final static String[] hexDigits ={"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c","d", "e", "f"};
//將指定byte數組轉換成16進制字符串
public static String byteArrayToHexString(byte[] b){
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++){
resultSb.append(byteToHexString(b[i]));
}
return resultSb.toString();
}
//將byte字符轉換成16進制字符串
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n = 256 + n;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
//獲取MD5密文
public static String compile(String origin){
String resultString = null;
try{
resultString = new String(origin);
MessageDigest md = MessageDigest.getInstance("MD5");
//md.digest()該函數返回值爲存放哈希值結果的byte數組
resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
}catch (Exception ex){
ex.printStackTrace();
}
return resultString;
}
}
加密方法二: /**
* Description:將字符串進行MD5加密
*
* @param inStr
* 需加密的字符串
* @return
*/
public static String string2MD5(String inStr) {
// 創建一個 MessageDigest 對象(爲應用程序提供信息摘要算法)
MessageDigest md5 = null;
try {
// 返回一個 MD5 算法實例
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
return "";
}
// 將需要加密的字符串數組化(char是unicode字符)
char[] charArray = inStr.toCharArray();
// 將char數組轉化成byte數組
byte[] byteArray = new byte[charArray.length];
// char字符轉換成byte字符
for (int i = NUM_ZERO; i < charArray.length; i++) {
byteArray[i] = (byte) charArray[i];
}
// 對指定數組進行更新,完成摘要計算
byte[] md5Bytes = md5.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
String temp = "";
for (int i = NUM_ZERO; i < md5Bytes.length; i++) {
// 對數組元素進行二進制運算
int val = ((int) md5Bytes[i]) & 0XFF;
//返回16進制的字符串
temp = Integer.toHexString(val);
temp = (1 == temp.length()) ? (STRING_ZERO + temp) : temp;
hexValue.append(temp);
}
return hexValue.toString().toUpperCase();
}
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.springframework.util.StringUtils;
加密方法三:
public class MD5Util{
/**
* md5加密
*
* @param str
* @return
*/
public static String md5(String str){
try{
if (StringUtils.isEmpty(str)){
str = "";
}
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(str.getBytes());
byte[] byteDigest = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < byteDigest.length; offset++){
i = byteDigest[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
// 32位加密
return buf.toString();
// 16位的加密
// return buf.toString().substring(8, 24);
}catch (NoSuchAlgorithmException e){
e.printStackTrace();
return null;
}
}
}