【java工具類】MD5加密

Message Digest Algorithm MD5(中文名爲消息摘要算法第五版)爲計算機安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護。該算法的文件號爲RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。

MD5算法具有以下特點:
1.壓縮性:任意長度的數據,算出的MD5值長度都是固定的。
2.容易計算:從原數據計算出MD5值很容易。
3.抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的MD5值都有很大區別。
4.弱抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即僞造數據)是非常困難的。
5.強抗碰撞:想找到兩個不同的數據,使它們具有相同的MD5值,是非常困難的。

MD5的作用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被”壓縮”成一種保密的格式(就是把一個任意長度的字節串變換成一定長的十六進制數字串)。除了MD5以外,其中比較有名的還有sha-1、RIPEMD以及Haval等。

百度百科地址:
http://baike.baidu.com/link?url=FVpyjf0Lvu9oSM3Z1ZRWlxt_FolfQh96NnBGubuyxstUVdPq7C3ZiJ_2bRWrVHnIobrv2zfdlXSSrbTpIm_QqK

import java.security.MessageDigest;
    /**
     * 採用MD5加密解密
     * @author tfq
     * @datetime 2011-10-13
     */
    public class testMD5 {

        /***
         * MD5加碼 生成32位md5碼
         */
        public static String string2MD5(String inStr){
            MessageDigest md5 = null;
            try{
                md5 = MessageDigest.getInstance("MD5");
            }catch (Exception e){
                System.out.println(e.toString());
                e.printStackTrace();
                return "";
            }
            char[] charArray = inStr.toCharArray();
            byte[] byteArray = new byte[charArray.length];

            for (int i = 0; i < charArray.length; i++)
                byteArray[i] = (byte) charArray[i];
            byte[] md5Bytes = md5.digest(byteArray);
            StringBuffer hexValue = new StringBuffer();
            for (int i = 0; i < md5Bytes.length; i++){
                int val = ((int) md5Bytes[i]) & 0xff;
                if (val < 16)
                    hexValue.append("0");
                hexValue.append(Integer.toHexString(val));
            }
            return hexValue.toString();

        }
        /**
         * 加密解密算法 執行一次加密,兩次解密
         */ 
        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("444dffdf");
            System.out.println("原始:" + s);
            System.out.println("MD5後:" + string2MD5(s));
            System.out.println("加密的:" + convertMD5(s));
            System.out.println("解密的:" + convertMD5(convertMD5(s)));
        }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章