1. 程式人生 > >MD5加密的簡單java實現

MD5加密的簡單java實現

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");         
    }
}

4.上述方法可直接拿來應急使用 ,建議有時間還是瞭解MD5的實現,拿來主義不靠譜呀,哈哈。