0. 前言
信息摘要,英译 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 方法接收