#JDK信息摘要
信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。
##MessageDigest类
MessageDigest 类提供信息摘要算法的功能,他是抽象类,需要MessageDigest.getInstance才能拿到MessageDigest的对象。以MD5为例下面是我碰到的问题以及解决方式
##注意点1.拿到对象
他是抽象类,需要 MessageDigest.getInstance 才能拿到MessageDigest的对象。
##注意点2.digest()的注意点
digest 方法只能被调用一次。在调用 digest 之后,MessageDigest 对象被重新设置成其初始状态。
##注意点3.进制转换问题
我们看到的加密后的摘要是十六进制的,而类返回给我们的是byte数组,我们需要byte[]转换成十六进制字符串。具体方法是:用HexBinaryAdapter类,他有一个marshal(byte[] bytes)方法,他可以将byte[]转换为String。
##MD5和sha的代码:
import java.security.MessageDigest;
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
public class JDK_MD5 {
public static String massage = "text";
public static void jdkMD5() throws Exception { //jdkMD5摘要
MessageDigest md = MessageDigest.getInstance("MD5");// 拿到提供信息摘要算法的类的对象
byte[] md5Digest = md.digest(massage.getBytes());// 得到MD5摘要
// digest 方法只能被调用一次。在调用 digest 之后,MessageDigest 对象被重新设置成其初始状态。
HexBinaryAdapter tool = new HexBinaryAdapter();
String result = tool.marshal(md5Digest);
System.out.println(result);
}
public static void jdksha() throws Exception { //jdksha摘要
MessageDigest md = MessageDigest.getInstance("sha");// 拿到提供信息摘要算法的类的对象
byte[] md5Digest = md.digest(massage.getBytes());// 得到MD5摘要
// digest 方法只能被调用一次。在调用 digest 之后,MessageDigest 对象被重新设置成其初始状态。
HexBinaryAdapter tool = new HexBinaryAdapter();
String result = tool.marshal(md5Digest);
System.out.println(result);
}
public static void main(String[] args) throws Exception {
jdkMD5();
jdksha();
}
}