摘要算法测试MD5或SHA-1
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 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("\n result is "+result);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
使用MD5摘要后对字节数组进行16进制编码!

浙公网安备 33010602011771号