1、前言

常见哈希算法:MD5、SHA-1、SHA-256、SHA-512; 哈希加密函数通常用来做消息摘要;

2、消息摘要

  • 消息摘要也叫数字摘要;
  • 使用数字摘要生成的值不可以篡改;
  • 消息摘要是单向,不可逆的;
  • 计算的出的消息摘要长度是固定的,MD5(128位),SHA-1(160位);

3、获取数字摘要代码

/**
 * @author:秋一叶
 * 消息摘要:MD5
 */
public class DigestDemo {
    public static void main(String[] args) throws Exception {
        String input = "原文";
        //获取数字摘要对象
        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        //获取数字摘要的字节数组
        byte[] digest = messageDigest.digest(input.getBytes());
        //System.out.println(Base64.encodeBase64String(digest));

        StringBuilder sb = new StringBuilder();
        for(byte b : digest){
            //转成16进制
            String s = Integer.toHexString(b & 0xff);
            if(s.length() == 1){
                s = "0" + s;
            }
            sb.append(s);
        }
        System.out.println(sb.toString());
    }
}

4、哈希算法特点

  • 快速查找:散列算法可以快速查找键的值,因为它可以通过计算散列 - 值来快速定位键的存储位置。
  • 安全性:散列算法可以提供安全性,因为它可以将敏感数据转换为不可读的散列值。
  • 唯一性:散列算法可以确保输入数据的唯一性,因为不同的输入数据应该产生不同的散列值。
  • 散列算法可能会产生冲突(即不同的输入数据产生相同的散列值)。这个问题可以使用开放寻址法或链表法来进行冲突解决。