跳到正文

密码泄露检测

Breach Check

查一个密码有没有出现在 Have I Been Pwned 的泄露数据里,浏览器只发出它 SHA-1 哈希的前五位(k-匿名)。

出现在公开泄露语料里的密码不是“弱”——它已经是已知的了,再长、熵再高也补救不了。这里把你的密码拿去和 Have I Been Pwned 的 Pwned Passwords 数据集比对,而密码本身、或者它的完整哈希,从不离开标签页。

🔒 完全在你的浏览器里运行breachpwnedprivacypassword

密码在这个标签页里先算成 SHA-1 哈希,只把哈希的前 5 个字符发给 Have I Been Pwned(k-匿名)。服务会返回几百条共用这个前缀的泄露哈希,你那条在不在其中,由你的浏览器比对。我们的服务器全程不参与。

这里不提供按邮箱查泄露:Have I Been Pwned 为那条接口要付费 API 密钥,而且它不是 k-匿名的。你可以自己去 haveibeenpwned.com 查。

怎么用

  1. 输入密码

    它在浏览器里用 SHA-1 哈希。只有这个哈希的前五个十六进制字符会被发出去。

  2. 服务返回的是一个范围,不是一个答案

    几百个泄露过的哈希共享这个前缀。它们全部返回,由你的浏览器在列表里找你的那一个——服务永远不知道是哪一个,甚至不知道它在不在里面。

  3. 命中就立刻处理

    计数大于零,意味着在它用过的每一个地方都要改掉,不只是你注意到的那一个。这个计数是包含它的泄露记录条数,不是你被泄露的次数。

常见问题

我的密码会到达任何人的服务器吗?

不会。发出去的是 SHA-1 哈希的五个十六进制字符;这个前缀被几十万个可能的密码共享,无法反推。请求从你的浏览器直接发到那个 API——本站的服务器不在路径上。

能查邮箱地址有没有泄露吗?

这里不能。邮箱查询需要付费的 API 密钥,而且没法用 k-匿名的方式做,所以宁可不提供,也不做得很糟。

没查到。那密码就安全了吗?

它的意思是这个密码不在这份语料里。从未公开的泄露、或者从未进入这个数据集的泄露,不在覆盖范围内——而一个在所有列表里都不存在的密码,仍然可以很弱。再拿它过一遍强度检测。

为什么用已经被攻破的 SHA-1?

因为公开的语料就是按 SHA-1 索引的,协议也是这么定义的。这里依赖的不是抗碰撞性——哈希在这里是查找键,不是密码存储。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。