Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
hashes — Magic hashes – PHP hash "collisions" | Kitploit
工具/GitHubGitHub/spaze/hashes
Vulnerability AnalysisHash AnalysisWeb SecurityCryptographyLearning & EducationCurated Resources
GitHubspaze/hashes

hashes

Magic hashes – PHP hash "collisions"

查看仓库
8351031年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

魔法哈希 – PHP 哈希“碰撞”

使用密码 1注册,然后使用密码 2登录。如果你能成功登录,则说明存储使用指定算法对密码进行哈希,并且 PHP 使用 == 来比较它们(适用于 MD5、SHA-1 和明文)。

MD5、SHA-1、SHA-224、SHA-256 及其他

对于 MD5、SHA-1 和 SHA-2 系列,它利用了众所周知的技巧(这实际上是一个有文档记载的特性,参见 PHP 类型比较表 和 浮点数):在 PHP 中 '0e1' == '00e2' == '0'。这只是将其用于实际用途。任何密码都匹配列表中的任何其他密码。这与整数字符串溢出为浮点数的技巧不同,只需辨别这两行代码之间的区别。

以下是所有具有魔法哈希的算法:

  • CRC32
  • CRC32b
  • FNV-1a/32
  • FNV-1a/64
  • FNV-1/32
  • FNV-1/64
  • HAVAL-128,3
  • HAVAL-128,4
  • HAVAL-128,5
  • HAVAL-160,3
  • HAVAL-160,4
  • HAVAL-160,5
  • JOAAT
  • MD2
  • MD4
  • MD5
  • MD5-double md5(md5(password))
  • MurmurHash3_x86_32/Murmur3a
  • MurmurHash3_x86_128/Murmur3c
  • MurmurHash3_x64_128/Murmur3f
  • PHOTON-80/20/16

引用 @0xb0bb 的话:“魔法哈希除了密码比较之外还有其他应用(例如缓存层或从哈希函数输出派生的数据),在这些场景中更容易发现这些已知不安全、不太知名以及伪哈希算法。”

Plaintext

对于明文,它使用了各种转换技巧。第一个密码只会匹配第二个密码。这些技巧按允许它们的 PHP 版本分组。

bcrypt

bcrypt 会将密码截断为最大长度 72 个字符。如果两个密码的前 72 个字符匹配,则密码匹配。

descrypt

descrypt(传统 UNIX DES crypt)会将密码截断为最大长度 8 个字符。如果两个密码的前 8 个字符匹配,则密码也会匹配,参见“General cross-check”一节。

PBKDF2-HMAC-SHA1、PBKDF2-HMAC-SHA224、PBKDF2-HMAC-SHA256

如果你使用长度超过 64 字节的密码,并使用 PBKDF2-HMAC-SHA1 对其进行哈希,它会先被 SHA1 预哈希,因此 PBKDF2-HMAC-SHA1(password1) === PBKDF2-HMAC-SHA1(password2),因为 sha1(password1) === bin2hex(password2)。对于 PBKDF2-HMAC-SHA224 和 PBKDF2-HMAC-SHA256,也会应用类似的预哈希。

Tiger/192,3

目前每个算法中只有一个魔法哈希,这要感谢 Norbert Tihanyi,希望将来会添加更多。

结论

在 PHP 中比较任何内容*时,请使用 ===,而不是 ==。在 PHP 中请使用 password_hash() 和 password_verify() 进行密码哈希,不要使用 MD5 或 SHA-1。*在比较哈希时请使用 hash_equals()。

历史

这一切都始于这条推文。2014 年 2 月,我生成了 QNKCDZO 和 240610708,此后它便传遍了整个互联网。只需谷歌一下。

  • MD5:推文、代码,贡献者:roycewilliams、Norbert Tihanyi、ethernetlord、0xb0bb、myst404
  • MD5-double:代码,贡献者:TheMostKnown
  • SHA-1:推文、代码,贡献者:roycewilliams、0xb0bb、matlink、myst404、Maxim Masiutin
  • Plaintext:推文、代码
  • bcrypt:代码
  • PBKDF2-HMAC-SHA1:由 Christian “CodesInChaos” Winnerlein 提供,Mathias Bynens 的解释、代码
  • PBKDF2-HMAC-SHA224:由 Norbert Tihanyi 提供,代码
  • PBKDF2-HMAC-SHA256:由 Jens 'atom' Steube 提供,代码
  • Tiger/192,3:由 Norbert Tihanyi 提供
  • SHA-224:由 Norbert Tihanyi、、、、 提供

如何计算你自己的魔法哈希

早在 2014 年,我就用自己的笔记本电脑、几个 for(还是 foreach?)循环、大量的 CPU 周期和一个外置风扇完成了这项工作,但现在你可以/应该使用 GPU 和修改版的 hashcat 来实现。参见 Carl Löndahl 和 0xb0bb 撰写的这篇文章。

Chick3nman 及其团队也正在开发他们自己的 hashcat 版本,敬请期待。

真实碰撞

MD5

如果你需要_真正_的字母数字碰撞,这里有一个由 Marc Stevens 提供的 72 字节字母数字 MD5 碰撞,仅有 1 字节不同,甚至只有 1 位不同:

root@kitploit:~
md5("TEXTCOLLBYfGiJUETHQ4hAcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak")
=
md5("TEXTCOLLBYfGiJUETHQ4hEcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak")

请注意,如果你用第一个密码注册,然后用第二个密码登录,这可能仍然意味着该网站使用的是 bcrypt(md5($password)),而不仅仅是 md5($password)。在升级密码哈希时,有时会使用这种哈希包装,但只应临时使用。

如果你对这些_真实_碰撞感兴趣,或者想创建自己的碰撞,请参见 Marc 的 Project HashClash。

LM

由 @solardiz 提供的真实 LM 哈希碰撞(#35,感谢!):

  • LM 半哈希:plaintext1 或 plaintext2
  • db82323cb0693862:2275490 或 0/*LUZ@
  • 44b3b60db75c15c1:2716388 或 1}DC<XT
  • 585e239d32df1998:8351762 或 $;)5D|X

查看这条推文了解如何生成更多。

下载工具
  • PHOTON-128/16/16
  • PHOTON-160/36/36
  • Quark u-Quark-136
  • RIPEMD-128
  • RIPEMD-160
  • SHA-1
  • SHA-224
  • SHA-256
  • SPONGENT-88/80/8
  • SPONGENT-88/176/88
  • SPONGENT-128/128/8
  • SPONGENT-128/256/128
  • Tiger/128,3
  • Tiger/128,4
  • Tiger/160,3
  • Tiger/160,4
  • Tiger/192,3
  • xxHash-XXH32
  • xxHash-XXH64
  • xxHash-XXH3_64bits
  • xxHash-XXH3_128bits
  • hops
    0xb0bb
    myst404
    Maxim Masiutin
  • SHA-256:由 Norbert Tihanyi、Chick3nman、roycewilliams、matlink 提供
  • CRC32、CRC32b、FNV-1a/32、FNV-1a/64、FNV-1/32、FNV-1/64、HAVAL-128,3、HAVAL-128,4、HAVAL-128,5、HAVAL-160,3、HAVAL-160,4、HAVAL-160,5、JOAAT、MD2、MD4、RIPEMD-128、RIPEMD-160、Tiger/128,3、Tiger/128,4、Tiger/160,3、Tiger/160,4:由 0xb0bb 提供
  • descrypt:由 James M. Hall、hops 提供
  • PHOTON-80/20/16、PHOTON-128/16/16、PHOTON-160/36/36:由 Norbert Tihanyi & Bertalan Borsos 提供
  • u-Quark-136:由 Norbert Tihanyi & Bertalan Borsos 提供
  • SPONGENT-88/80/8、SPONGENT-88/176/88、SPONGENT-128/128/8、SPONGENT-128/256/128:由 Norbert Tihanyi & Bertalan Borsos 提供
  • xxHash:由我提供(#27)
  • MurmurHash3:由我提供(#28)