java.security.MessageDigest类用于为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。简单点说就是用于生成散列码。信息摘要是安全的单向哈希函数,它接收随意大小的数据,输出固定长度的哈希值。
MessageDigest 通过其getInstance系列静态函数来进行实例化和初始化。MessageDigest 对象通过使用update方法处理数据。不论什么时候都能够调用reset方法重置摘要。一旦全部须要更新的数据都已经被更新了,应该调用digest方法之中的一个完毕哈希计算并返回结果。
对于给定数量的更新数据,digest方法仅仅能被调用一次。digest方法被调用后,MessageDigest 对象被又一次设置成其初始状态。
public class MessageDigestUtil {
private static MessageDigestmessageDigest;
public static StringgetMessageDigest(String source,String hashtype)throws NoSuchAlgorithmException {
if(messageDigest ==null){
messageDigest = MessageDigest.getInstance(hashtype);
}
// 向已初始化的MessageDigest对象提供传送要计算的数据
messageDigest.update(source.getBytes());
// 调用digest(摘要)方法计算摘要(生成散列码)
byte[] digest =messageDigest.digest();
StringBuffer stringBuffer =new StringBuffer();
for (byte b : digest) {
// toHexString(int i)以十六进制的无符号整数形式返回一个整数参数的字符串表示形式
// & 0XFF操作,可以把高24位置0
String s = Integer.toHexString(0xff & b);
if(s.length() ==1){
stringBuffer.append("0");
}
stringBuffer.append(s);
}
return stringBuffer.toString();
}
}