最近在看视频时,看到 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