跳到主内容
快讯直播
AI智模界
AI 词典

彩虹表:哈希不可逆,原文为什么还能被查出来

一句话定义:彩虹表(Rainbow Table)是一张预先算好的“哈希值到原始口令”的对照表;它用查表省掉现场穷举的时间,专门还原没加盐的哈希。

哈希不可逆,为什么还能查出来

哈希函数(Hash Function)是单向的:给任意输入,很快算出定长指纹;拿指纹反推原文,没有数学公式。因此彩虹表并不“解密”,它只是“猜”:把候选口令逐个哈希,看谁的指纹对得上。

难题在于候选太多,而且每次都从零算太浪费。彩虹表的核心思路是:算一次,存下来,反复用。

省空间的手法很巧。最朴素的存法是每个口令存一行,数据量会急剧膨胀。彩虹表改为链式存储:取起点口令,哈希得到指纹,用归约函数(Reduction Function)把指纹折回成一个像口令的字符串,再哈希……重复几千次得到终点,整条链只存首尾。

这就像一本只记“起点城市到终点城市”的里程手册,中途站不记。要找某个中途城市,就顺着推算走一遍;终点对上说明目标在这条链里,再重走一遍定位。归约函数按链上位置换不同的(一条链一段颜色,所以叫“彩虹”),是为了减少不同链相撞、互相覆盖。

和老办法的区别:暴力破解(Brute Force)每次现场算;字典攻击(Dictionary Attack)拿常见口令清单逐个试;彩虹表是一次预计算、多次复用,典型的时间与空间权衡(Time-Memory Tradeoff)。代价是表只对某一种哈希算法和某个字符集长度范围有效,换算法就作废。网上那些“MD5 在线解密”大多不是破解,就是查这类表。

加盐和慢哈希各堵哪条路

彩虹表的杀伤力在于“算一次,打一百个库”。两件防御各自堵住其中一条路。

加盐(Salt):给每个口令配一段随机串,拼起来再哈希,盐与结果一起存。同一口令在不同用户处指纹不同,攻击者必须为每个盐重建表,预计算的价值归零。盐堵的是“复用”这条路:它并不让单条口令更难猜,关键是让“算一次用一万次”不成立。

慢哈希(Slow Hash):bcrypt、scrypt、Argon2 这类算法故意让单次哈希耗时几十上百毫秒、难度可调。它堵的是“算得快”这条路:每秒能试的次数被压到极低,建表更是贵到不划算。慢哈希通常自带盐,两者常一起出现。

手段主要堵的路不解决什么
加盐预计算复用、彩虹表单个弱口令仍可被定向爆破
慢哈希每秒尝试次数、建表成本口令本身太弱照样输
长随机口令整个候选空间人记不住,要密码管理器

对从业者和普通人的意义

从业者:口令存储别自己造轮子,用成熟库的默认参数、每用户独立盐;看到系统直接存 MD5/SHA-256 指纹,就该当作危险信号。普通人:别复用口令,用密码管理器生成长随机密码;这样即使某个站点泄露,你的指纹也不在别人的现成表里。具体算法与参数选择以官方文档为准。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。