内容简介:信息摘要,英译由于对信息摘要算法研究并不透彻,因此这边公章将重点讲 jdk 支持的三个常见摘要算法的使用:Java 对信息摘要算法做了比较完整的封装——
信息摘要,英译 Message Digest
。看见首字母这么大的 M
、 D
有没有立即联想到 MD5
算法。其实 MD5
算法只是目前比较流行的信息摘要算法,在它之前,还出现过 MD2
MD4
,以及目前仍然在用的安全散列算法( Secure Hash Algorithm
) SHA1
和 SHA256
都属于信息摘要算法的一种。国家密码管理局于2010年12月也发布了一种信息摘要算法 SM3
。
由于对信息摘要算法研究并不透彻,因此这边公章将重点讲 jdk 支持的三个常见摘要算法的使用: MD5
、 SHA1
、 SHA256
。
1. 相关代码
Java 对信息摘要算法做了比较完整的封装—— MessageDigest
。该类是抽象类,针对具体信息摘要算法的实现使用了代理模式。主要提供了三个方法及其重载方法。
/** * 获取摘要算法对象。 * 通过指定参数 algorithm 是 MD5 SHA1 SHA256 ,获取具体的实例。 */ static MessageDigest getInstance /** * 接收参与摘要计算的字节数据,可多次执行。一般用于文件的的摘要计算。 * 也可以一次将文件的全部字节读取至内存,使用 digest 方法一次计算。 */ void update /** * 具有两种使用场景。 * 1. 在 update 方法接收全部的字节数据之后,使用此方法生成摘要数据。 * 2. 直接使用此方法接收较短的字节数据,生成摘要数据。 */ byte[] digest 复制代码
2. 用途
2.1 计算字符串
用于校验报文数据在网络传输的过程中是否被篡改过。
以 MD5 算法为例:
/**
* 计算字符串md5
*
* @param data
* @return
*/
public static final String md5(String data) {
try {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] digest = messageDigest.digest(data.getBytes());
return HexUtil.encode(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
复制代码
2.2 计算文件
通过网络下载一些文件的时候,通常通过计算下载下来文件的 MD5 和 SHA1 判断下载下来的文件是否在传输过程中被篡改过。
以 MD5 算法为例:
/**
* 计算文件md5
*
* @param data
* @return
*/
public static final String fileMd5(String path) {
try {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
File file = new File(path);
if (!file.exists())
throw new IllegalArgumentException("The file path is illegal");
InputStream inputStream = new FileInputStream(file);
byte[] buff = new byte[1024];
int len;
while ((len = inputStream.read(buff)) > 0) {
messageDigest.update(buff, 0, len);
}
byte[] digest = messageDigest.digest();
return HexUtil.encode(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
复制代码
如需计算 SHA1 和 SHA256 ,只需将 getInstance
的参数值改成 SHA-1
和 SHA-256
。
3. 总结
千万不要认为 MD5
是加密算法。信息摘要算法,是一种单向散列算法,是一种不可逆的算法,即,可以根据一个字符串计算出 MD5
,却不能根据 MD5
还原出生成它的字符串。
觉得有用?那打赏一个呗。我要打赏
此处是广告 : Flueky的技术小站
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Inside Larry's and Sergey's Brain
Richard Brandt / Portfolio / 17 Sep 2009 / USD 24.95
You’ve used their products. You’ve heard about their skyrocketing wealth and “don’t be evil” business motto. But how much do you really know about Google’s founders, Larry Page and Sergey Brin? Inside......一起来看看 《Inside Larry's and Sergey's Brain》 这本书的介绍吧!