MD5 加密算法的使用

  最近在看视频时,看到 MD5 的加密算法,感觉其在某些重要信息中,还是很好的解决了一些安全问题的。于是,就在自己理解的情况下,实现了 MD5 算法。

  具体的流程大致是:

  (1)将指定的数据首先通过 MessageDigest 类转为 MD5 的表现形式

  (2)将 MD5 表现形式的数据,将其每个字节,转为 16 进制的表示方法

具体的实现方式如下:

/**
 * 0.0.0.1
 */
package com.test.common;


import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import org.apache.log4j.Logger;

/**
 * MD5加密测试
 * @author 高青
 * 2014-4-21
 */
public class MD5Security {
    
    /** 日志对象 */
    private static Logger log = Logger.getLogger(MD5Security.class);
    
    /** 十六进制数组 */
    private static char[] hexArr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

    /**
     * 构造方法
     */
    public MD5Security() {
        // TODO Auto-generated constructor stub
    }

    /**
     * 主线程方法
     * @author 高青 
     * 2014-4-21
     * @param args 字符串参数集
     * @return*/
    public static void main(String[] args) {
        //加密的信息
        String securityInfo = "a";
        
        try {
            //通过 JAVA 的 Security 包,得到 MD5 表示方式 的字节数组
            MessageDigest instance = MessageDigest.getInstance("MD5");
            
            //此字节数据是 128 位的长整数,即是 16 个字节表示的数据
            byte[] digest = instance.digest(securityInfo.getBytes());
            
            
            //转换为 16 进制后的字节数组
            char[] hexByte = new char[16*2];
            //记录 当前计算后的字节在 十六进制字节数组中的位置
            int k = 0;
            
            //循环遍历 MD5 中的每个字节,并将每个字节改成对应的 16 进制进行表示
            for (int i = 0; i < 16; i++) {
                
                //计算当前字节的高四位所对应的十六进制数
                hexByte[k++] = hexArr[digest[i] >>> 4 & 0xf];
                
                //计算当前字节的低四位所对应的十六进制数
                hexByte[k++] = hexArr[digest[i] & 0xf];
            }
            //将转化后的字符数组转为 String 类型
            String hexString = new String(hexByte);
            System.out.println(hexString);
            
        } catch (NoSuchAlgorithmException e) {
            log.info("实例化 MessageDigest 对象异常!");
            e.printStackTrace();
        }
    }
}

 加密后的结果为:0cc175b9c0f1b6a831c399e269772661

 

posted @ 2014-04-21 11:23  绿 叶  阅读(1977)  评论(2编辑  收藏  举报