摘要算法

摘要算法

最常见的例子:java 中的哈希码(hashcode)。

摘要算法,就是将很长的字符串,转换成固定长度的字符串。

你可能会觉得很熟,因为概念与哈希算法、散列算法完全一致,本质上来说,这几个算法是同一个算法。


摘要算法不是加密算法,经过摘要计算之后,数据无法还原。

哈希碰撞

从算法的定义就能看出,必定存在两个不同的字符串,计算出完全一致的摘要。

这种情况称之为哈希碰撞,学哈希表的时候,会关注这个概念。


哈希碰撞,这个名词应该是最专业的,不过你搜这几个名词,也能找到相关内容:散列碰撞、散列冲突、哈希冲突。

用途一:哈希表

既然都叫哈希算法了,哈希表的设计必定与之相关,也就是说这个算法能用在数据结构上。

用途二:数据一致性检验

这个应用场景比较容易理解,在数据发送前,对数据进行一次摘要,数据收到后,进行同样的摘要计算,如果结果相同,那么说明本次接收到完整的数据。

最简单的摘要算法

将姓氏一样的人,放在一起管理。

从姓名中获取姓氏的过程,就是一种摘要算法,只不过这种算法,抗修改性较弱,姓氏一样的人很多,很容易发生哈希碰撞,因此,无法用在数据一致性检验上。

MD5摘要

Apache 提供的 commons-codec 中对 MessageDigest 进行了封装,可以直接使用,如果想自己实现,下面代码可以作为参考。

MD5算法生成字符串,其中十六进制转码 Hex 可以参考 commons-codec

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5 {
    public static byte[] digest(byte[] data) {
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(data);
            return md5.digest();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }

    public static String hexBit32(String data) {
        return Hex.encodeToString(digest(data.getBytes()));
    }

    public static String hexBit16(String data) {
        return hexBit32(data).substring(8, 24);
    }
    
    public static void main(String[] args) {
        System.out.println(MD5.hexBit16("12121212"));
    }
} 

常用的摘要算法

摘要算法是按照接口标准实现的,使用方法都是一样的,修改上面代码中 MessageDigest.getInstance() 这一行代码,即可实现其他摘要算法。

    public static final String MESSAGE_DEGEST_MD2 = "MD2";
    public static final String MESSAGE_DEGEST_MD5 = "MD5";
    public static final String MESSAGE_DEGEST_SHA = "SHA";
    public static final String MESSAGE_DEGEST_SHA_224 = "SHA-224";
    public static final String MESSAGE_DEGEST_SHA_256 = "SHA-256";
    public static final String MESSAGE_DEGEST_SHA_384 = "SHA-384";
    public static final String MESSAGE_DEGEST_SHA_512 = "SHA-512";

posted on   疯狂的妞妞  阅读(756)  评论(0编辑  收藏  举报

(评论功能已被禁用)
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示