md5算法总结
md5算法是信息摘要算法,而不是无损压缩算法,因此不可能从密文推测出原文。
但由于生成的128 位(16 字节)的散列值是有数量范围,而原文是无限的,因此必然会产生碰撞,也就是俗称的破解:
即两个不同的原文生成了同一个md值。
常用破解法:
-
穷举法,耗时较长
-
字典法,将原文和md5值存储到哈希表中,查询快但占用空间大
-
彩虹链表法
时间和空间的均衡,将原文经k次H(x)和R(x)连续运算,得到包含原文在内的2K+1个节点的链表,
取此链表的头尾节点(即原文和最后一次的R(x)运算结果)存储到哈希表,
在进行碰撞时,将密文进行一次R(x)运算,然后从哈希表中查找此结果,如果有则代表原文可能在对应的那个链表中;
如果每次则再进行一次H(x)和R(x)运算,继续查找,直到不超过K次能够找到。哈希链表法的R(x)同样会产生碰撞,因此优化为彩虹链表法,采用多个不同R(x)函数,如R1(x) R2(x)…
这样只会同级的R(x)产生碰撞,降低了整体全部链表的碰撞几率。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效