编码、摘要和加密(二)——信息摘要

栏目: 编程工具 · 发布时间: 4年前

内容简介:信息摘要,英译由于对信息摘要算法研究并不透彻,因此这边公章将重点讲 jdk 支持的三个常见摘要算法的使用:Java 对信息摘要算法做了比较完整的封装——

信息摘要,英译 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 还原出生成它的字符串。

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

此处是广告 : Flueky的技术小站


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

游戏人工智能编程案例精粹

游戏人工智能编程案例精粹

巴克兰德 (Mat Buckland) / 罗岱 / 人民邮电出版社 / 2008年06月 / 55.00元

《游戏人工智能编程案例精粹》适合对游戏AI开发感兴趣的爱好者和游戏AI开发人员阅读和参考。一起来看看 《游戏人工智能编程案例精粹》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具