1.先大致說一下什麼是MD5加密。MD5的全稱是Message-Digest Algorithm 5(信息-摘要算法),看了很多大神的文章,自己有了點理解 ,MD5其實不算是加密算法,而是一種信息的摘要。它的特性是不可逆的,所以除了暴力破解 一般逆序算法是得不到結果的。舉個例子:比如1+99=100,MD5接到的字符是1和99 然後通過自己的算法最後生成100 但知道結果是100卻很難推測出是通過1+99得來的。再比如 一本書的每一頁取一個字,最後通過計算得出一個MD5碼,但卻很難通過這個MD5碼去推測出這本書的內容。這也就是MD5的不可逆的原因。舉的例子和對MD5的理解僅代表本人自己的觀點,如有錯誤還請各位大神批評指正。
2.這篇文章不討論複雜的MD5的算法實現,由於本人並非科班出生,只是在項目中要用所以大致使用了一下,具體原理等以後有空閒時間慢慢研究。話不多說,直接上代碼。
3.分享兩個方法①getMD5() 和 ②MD5(),傳入要加密的字符str,返回加密成功的字符 . 方法①生成的是小寫字母+數字,方法②生成的是大寫字母+數字,方法2要是想得到小寫字母+數字就把hexDigits數組中的大寫換成小寫。 大小寫可以通過String類的方法處理
- package com.nebula.app.app.common.utils;
- import java.math.BigInteger;
- import java.security.MessageDigest;
- public class AppMD5Util {
- /**
- * 對字符串md5加密(小寫+字母)
- *
- * @param str 傳入要加密的字符串
- * @return MD5加密後的字符串
- */
- public static String getMD5(String str) {
- try {
- // 生成一個MD5加密計算摘要
- MessageDigest md = MessageDigest.getInstance("MD5");
- // 計算md5函數
- md.update(str.getBytes());
- // digest()最後確定返回md5 hash值,返回值爲8爲字符串。因爲md5 hash值是16位的hex值,實際上就是8位的字符
- // BigInteger函數則將8位的字符串轉換成16位hex值,用字符串來表示;得到字符串形式的hash值
- return new BigInteger(1, md.digest()).toString(16);
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- /**
- * 對字符串md5加密(大寫+數字)
- *
- * @param str 傳入要加密的字符串
- * @return MD5加密後的字符串
- */
- public static String MD5(String s) {
- char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
- try {
- byte[] btInput = s.getBytes();
- // 獲得MD5摘要算法的 MessageDigest 對象
- MessageDigest mdInst = MessageDigest.getInstance("MD5");
- // 使用指定的字節更新摘要
- mdInst.update(btInput);
- // 獲得密文
- byte[] md = mdInst.digest();
- // 把密文轉換成十六進制的字符串形式
- int j = md.length;
- char str[] = new char[j * 2];
- int k = 0;
- for (int i = 0; i < j; i++) {
- byte byte0 = md[i];
- str[k++] = hexDigits[byte0 >>> 4 & 0xf];
- str[k++] = hexDigits[byte0 & 0xf];
- }
- return new String(str);
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- public static void main(String[] args) {
- String md5 = MD5("password");
- String md52 = getMD5("password22");
- }
- }