您的位置:首页 > 编程语言 > Java开发

JAVA计算摘要,例如MD5和SHA-256

2017-11-30 21:22 766 查看
摘要有什么用?

1.保证数据的完整性:例如你发送一个100M的文件给你的B,但是你不知道B收到的是否是完整的文件;此时你首先使用摘要算法,如MD5,计算了一个固定长度的摘要,将这个摘要和文件一起发送给B,B接收完文件之后,同样使用MD5计算摘要,如果B计算的结果和你发送给他的摘要结果一致,说明B接收的文件是完整的。

2.数字签名:数字签名里面的签名都是使用摘要算法计算的,目前(2017年),数字签名的摘要算法已经使用SHA-256作为规范。

JAVA如何产生摘要

JDK一般都包含一个security包,这个包已经实现主流的摘要算法,我们直接拿过来使用就好,接下来放一个工具类:

public final class MessageDigestUtil {
/**
* 使用指定哈希算法计算摘要信息
* @param content 内容
* @param algorithm 哈希算法
* @return 内容摘要
*/
public static String getMD5Digest(String content,String algorithm){
try {
MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
messageDigest.update(content.getBytes("utf-8"));
return bytesToHexString(messageDigest.digest());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
/**
* 将字节数组转换成16进制字符串
* @param bytes 即将转换的数据
* @return 16进制字符串
*/
private static String bytesToHexString(byte[] bytes){
StringBuffer sb = new StringBuffer(bytes.length);
String temp = null;
for (int i = 0;i< bytes.length;i++){
temp = Integer.toHexString(0xFF & bytes[i]);
if (temp.length() <2){
sb.append(0);
}
sb.append(temp);
}
return sb.toString();
}
}


调用:

MessageDigestUtil.getMD5Digest("test","sha-256");


输出:

9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08


结束,

转载请加链接!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息