在各種應用系統中,如果需要設置賬戶,那麼就會涉及到儲存用戶賬戶信息的問題,爲了保證所儲存賬戶信息的安全,通常會採用MD5加密的方式來,進行儲存。
MD5,全稱爲“Message Digest Algorithm 5”,中文名“消息摘要算法第五版”,它是計算機安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護。嚴格來說,它是一種摘要算法,是確保信息完整性的。不過,在某種意義上來說,也可以算作一種加密算法。
MD5 算法具有很多特點:
壓縮性:任意長度的數據,算出的MD5值長度都是固定的。
容易計算:從原數據計算出MD5值很容易。
抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的MD5值都有很大區別。
弱抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即僞造數據)是非常困難的。
強抗碰撞:想找到兩個不同的數據,使它們具有相同的MD5值,是非常困難的。
但實際上MD5不是一種加密算法,只是一種算法,因爲它是一個不可逆的過程,即 MD5 生成消息摘要後是不能通過結果解析得到原來的內容。
MD5在線加密工具:http://tools.jb51.net/password/CreateMD5Password
MD5加密方法之一 java自帶jar工具MessageDigest實現
java.security.MessageDigest
import java.math.BigInteger;
import java.security.MessageDigest;
public class md52 {
public static void main(String []args) {
try {
String str = "abc";
// 生成一個MD5加密計算摘要
MessageDigest md = MessageDigest.getInstance("MD5");
// 計算md5函數
md.update(str.getBytes("utf-8"));
// digest()最後確定返回md5 hash值,返回值爲8爲字符串。因爲md5 hash值是16位的hex值,實際上就是8位的字符
// BigInteger函數則將8位的字符串轉換成16位hex值,用字符串來表示;得到字符串形式的hash值
String a = new BigInteger(1, md.digest()).toString(16);
System.out.println(a);
} catch (Exception e) {
}
}
}
//輸出結果
//900150983cd24fb0d6963f7d28e17f72
MD5加密方法之二 spring自帶的工具DigestUtils實現
org.springframework.util.DigestUtils
// spring自帶工具包DigestUtils
System.out.println(DigestUtils.md5DigestAsHex("1234".getBytes()));
//輸出結果
// 81dc9bdb52d04dc20036dbd8313ed055
由於MD5不可逆,所以附加一個加密解密算法
public class convertMD5 {
public static String convertMD5(String inStr){
char[] a = inStr.toCharArray();
for (int i = 0; i < a.length; i++){
a[i] = (char) (a[i] ^ 't');
}
String s = new String(a);
return s;
}
/**
* 加密解密算法 執行一次加密,兩次解密
*/
// 測試主函數
public static void main(String args[]) {
String s = new String("abc");
System.out.println("原始:" + s);
System.out.println("加密的:" + convertMD5(s));
System.out.println("解密的:" + convertMD5(convertMD5(s)));
}
}
//調試結果
//原始:abc
//加密的:???
//解密的:abc