许多古老的网站把密码用 md5、sha1 等函数做一遍转换就存在数据库里面。比如 LinkedIn 曾经就保存密码的 sha1 值,2021 年这些哈希值泄露之后,
3天内就被还原出 90% 的密码。
数据库表内容如下所示:
username
password_md5
admin
ab4f63f9ac65152575886860dde480a1
toto
21b72c0b7adc5c7b4a50ffcb90d92dd6
billy
47ad898a379c3dad10b4812eba843601
tata
21b72c0b7adc5c7b4a50ffcb90d92dd6
titi
5b9a8069d33fe9812dc8310ebff0a315
这根本就没什么用,不信的话找个 md5 值上网搜搜,点进去第一个链接就能看到 admin 的明文。
你也可以找一份常用密码表,先求出所有常用密码的md5,再去和数据库对比。这叫彩虹表。网上有许多现成的彩虹表可供下载。
用 hashcat 可以很快还原明文:
cat <
ab4f63f9ac65152575886860dde480a1
21b72c0b7adc5c7b4a50ffcb90d92dd6
47ad898a379c3dad10b4812eba843601
21b72c0b7adc5c7b4a50ffcb90d92dd6
5b9a8069d33fe9812dc8310ebff0a315
EOF
hashcat -m 0 target_md5.txt ./rockyou.txt
密码字典 rockyou.txt 可以从 github 下载到。
也许有人觉得是因为 MD5 太垃圾了,改用更好的哈希方法,如sha256,sha512,
sha3 等。但这些算法,并不是被设计来保存密码的,它们设计来计算某个文件或消息的摘要,而后用来做数字签名、优化搜索或者用于索引。这些算法的目的设计要求之一就是要快。因此上述方法都可以用来处理这些哈希计算的密码。