摘要算法
摘要算法
最常见的例子: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";
疯狂的妞妞 :每一天,做什么都好,不要什么都不做!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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