内容简介:信息摘要,英译由于对信息摘要算法研究并不透彻,因此这边公章将重点讲 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的技术小站
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 编码、摘要和加密(三)——数据加密
- 编码、摘要和加密(一)——字节编码
- 为skynet的crypt库扩展一些加密(摘要)算法支持.
- 《深入Linux内核架构》摘要
- 以太坊 2.0 会议摘要 #42
- 网络安全漫谈及实战摘要
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Linux内核设计与实现(原书第3版)
Robert Love / 陈莉君、康华 / 机械工业出版社华章公司 / 2011-4-30 / 69.00元
《Linux内核设计与实现(原书第3版)》详细描述了Linux内核的设计与实现。内核代码的编写者、开发者以及程序开发人员都可以通过阅读本书受益,他们可以更好理解操作系统原理,并将其应用在自己的编码中以提高效率和生产率。 《Linux内核设计与实现(原书第3版)》详细描述了Linux内核的主要子系统和特点,包括Linux内核的设计、实现和接口。从理论到实践涵盖了Linux内核的方方面面,可以满......一起来看看 《Linux内核设计与实现(原书第3版)》 这本书的介绍吧!