博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编码、摘要和加密(二)——信息摘要
阅读量:7245 次
发布时间:2019-06-29

本文共 2209 字,大约阅读时间需要 7 分钟。

0. 前言

信息摘要,英译 Message Digest 。看见首字母这么大的 MD有没有立即联想到 MD5 算法。其实 MD5算法只是目前比较流行的信息摘要算法,在它之前,还出现过 MD2 MD4,以及目前仍然在用的安全散列算法(Secure Hash AlgorithmSHA1SHA256都属于信息摘要算法的一种。国家密码管理局于2010年12月也发布了一种信息摘要算法 SM3

由于对信息摘要算法研究并不透彻,因此这篇文章将重点讲 jdk 支持的三个常见摘要算法的使用:MD5SHA1SHA256

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-1SHA-256

3. 总结

千万不要认为 MD5 是加密算法。信息摘要算法,是一种单向散列算法,是一种不可逆的算法,即,可以根据一个字符串计算出 MD5,却不能根据 MD5 还原出生成它的字符串。

觉得有用?那打赏一个呗。

此处是广告

转载于:https://juejin.im/post/5cc708cfe51d456e7d189ff5

你可能感兴趣的文章
Mysql半同步复制(Semi-synchronous Replication)
查看>>
[CTO札记]内容开放的思考
查看>>
Mocha BSM业务服务管理——业务服务定义与展现
查看>>
No curses/termcap library found
查看>>
iOS设备接入WiFi和3G网络安全性分析
查看>>
.NET领域驱动设计—初尝(三:穿过迷雾走向光明)
查看>>
iscsi Target (TGT)
查看>>
微软与VMWARE的桌面虚拟化简介
查看>>
基于hadoop2.7集群的Spark2.0,Sqoop1.4.6,Mahout0.12.2完全分布式安装
查看>>
B3-从http头中找到X-Forwarded-For发来的客户端ip 地址
查看>>
让榨汁机定时工作(C#+PLC)
查看>>
DNS服务
查看>>
关于广告
查看>>
现有书形成的网络职业知识体系
查看>>
窗体皮肤实现 - 增加Toolbar的交互性
查看>>
将Flex留言板搬家至Google App Engine的体会
查看>>
LeetCode:Add Two Numbers
查看>>
Creating and Using a Static Library
查看>>
Oracle RAC 11gR2数据库单节点linux操作系统无法启动
查看>>
java20 创建服务器:ServerSocket
查看>>