package com.fenghao.other; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * * <P>摘要工具类使用MD5或SHA-1摘要算法</P> * @ClassName: MessageDigestUtils * @author 冯浩 2016年11月29日 下午3:15:54 * @see TODO */ public class MessageDigestUtils { public String digestMessage(String context,String hashType) throws NoSuchAlgorithmException{ MessageDigest in = MessageDigest.getInstance(hashType); byte[] digest = in.digest(context.getBytes()); return bytes2Hex(digest); } private String bytes2Hex(byte[] bytes){ StringBuilder str=new StringBuilder(); for (int i = 0; i < bytes.length; i++) { byte b=bytes[i]; boolean negative=false;//判断正负 if(b<0) negative=true; int line = Math.abs(b);//取绝对值 if(negative) line=line|0x80; //0x代表十六进制 8*16=128 二进制表示:10000000 负负得正 最高位的负号变成数值进行计算 String tmp = Integer.toHexString(line&0xFF); if(tmp.length()==1){ str.append("0"); } str.append(tmp.toLowerCase()); } return str.toString(); } /** * * <p>方法测试</p> * <p>Description: TODO</p> * @author 冯浩 2016年11月29日 下午3:41:13 */ @org.junit.Test public void Test(){ int a=3;//3 int b=-3;//3 int c=128;//128 int d=-128;//128 int e=129;//129 int f=-129;//129 int i = Math.abs(-199);//取绝对值 int n=d|0x80; System.out.println(" n is "+n); } public static void main(String[] args) { MessageDigestUtils message=new MessageDigestUtils(); String context="fenghao"; try { String result = message.digestMessage(context, "MD5"); System.out.println(" result is "+result); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
使用MD5摘要后对字节数组进行16进制编码!