特洛伊亨特pwned密码api的python包装器。

pwnedpasswords的Python项目详细描述


CI StatusVersionPython Versions

pwnedpasswords是一个小的python包装器和命令行实用程序,允许您使用Pwned Passwords v2 API检查密码短语是否已被pwned。所有提供的密码数据在发送到api之前都是k-anonymized,因此明文密码永远不会离开您的计算机。

来自https://haveibeenpwned.com/API/v2#PwnedPasswords

Pwned Passwords are more than half a billion passwords which have previously been exposed in data breaches. The service is detailed in the launch blog post then further expanded on with the release of version 2. The entire data set is both downloadable and searchable online via the Pwned Passwords page.

安装

pwnedpasswords可通过PyPi下载。您可以立即使用pip安装它。

pip install pwnedpasswords

使用量

importpwnedpasswordspwnedpasswords.check("testing 123")# Returns 1

安全说明

任何明文密码都不能使用pwnedpasswords离开您的计算机。

这是怎么回事?好吧,pwned passwords v2 api有一个非常酷的k-anonymity实现。

来自https://blog.cloudflare.com/validating-leaked-passwords-with-k-anonymity/

Formally, a data set can be said to hold the property of k-anonymity, if for every record in a released table, there are k − 1 other records identical to it.

这只允许我们提供所讨论密码的sha-1散列的前5个字符。然后,api用带有该前缀的sha-1散列后缀列表进行响应。平均来说,这个列表包含478个结果。

比我聪明的人用math来证明5个字符的前缀足以维持这个数据库的k-匿名性。

简而言之:如果使用此库,明文密码将受到保护。你不会泄露足够的数据来识别你正在搜索的密码。

注释

pwnedpasswords会自动检查您提供的输入是否像sha-1散列。如果是的话,就不会做任何进一步的处理了。如果它看起来像纯文本,它会在发送到pwned passwords api之前自动散列它。

如果您想提供一个已经散列的密码作为pwnedpasswords的输入,则无需执行任何操作--pwnedpasswords将检测到它看起来像一个sha-1散列,并且在将其发送到range端点之前不会再次散列它。

pwnedpasswords.check("b8dfb080bc33fb564249e34252bf143d88fc018f")

同样,如果密码看起来像sha-1散列(即,匹配regex[0-9a-fA-F]{40}),但实际上是用户提供的密码,请将plain_text设置为True,以便库知道在将其发送到api之前对其进行散列。

pwnedpasswords.check("1231231231231231231231231231231231231231",plain_text=True)

详细信息

check

这是首选方法。默认情况下,check方法使用https://api.pwnedpasswords.com/range/端点,即k-anonymous

pwnedpasswords.check("mypassword")# 34729

如果要强制pwnedpasswords使用搜索终结点(https://api.pwnedpasswords.com/pwnedpassword/),请将anonymous参数设置为False

pwnedpasswords.check("password",anonymous=False)# 3303003

如果您希望更快的响应时间,并且不担心通过网络搜索的密码泄露,那么您可能希望这样做。

如果希望直接访问搜索和范围终结点,也可以直接调用它们。

range

pwnedpasswords.range("098765")# outputs a dictionary mapping SHA-1 hash suffixes to frequency counts

命令行实用程序

pwnedpasswords附带了一个方便的命令行实用程序。

$ pwnedpasswords 123456password
240

输出只是在pwned密码数据库中找到的条目数。

如果要防止输入出现在历史记录中,请指定--stdin参数,以通过stdin提供输入(h/t到@tveastman进行请求)。

$ pwnedpasswords --stdin
mypassword
34729

要获得帮助,只需提供-h作为命令行参数。

$ pwnedpasswords -h
usage: pwnedpasswords [-h][--verbose][--plain-text](--stdin | password)

Checks Pwned Passwords API to see if provided plaintext data was found in a
data breach.

positional arguments:
  password      The password or hashed password to search for.

optional arguments:
  -h, --help    show this help message and exit
  --verbose     Display verbose output.
  --plain-text  Specify that the provided input is plain text, even if it
                looks like a SHA-1 hash.
  --stdin       Read provided input from stdin.

注意

CLI返回一个等于结果计数的BASE-10日志的退出代码,加上1。如果API中没有匹配项,则退出状态将是^ {CD14}}。虽然返回BASE-10日志可能看起来很奇怪,但请注意,大多数系统要求退出状态代码在0~127的范围内,并且我希望状态代码提供^ {EM1} $一些EEM>严重性指示。log(n)似乎是一个很好的折衷方案。退出状态是log(n)+ 1,因为数据库中有1个匹配的匹配。

如果您想查看引擎盖下的情况以确保一切正常工作,请设置--verbose标志。

$ pwnedpasswords 123456password --verbose
INFO:pwnedpasswords.pwnedpasswords:https://api.pwnedpasswords.com/range/5052C
INFO:pwnedpasswords.pwnedpasswords:Entry found
240

谢谢

特别感谢Troy Hunt收集此数据并提供此服务。

作者

丹·洛温赫兹/(@dlo

另请参见

django-pwnedpasswords-validator,使用此库根据pwned passwords api检查用户密码的验证器。

许可证

apache许可证,2.0版。有关详细信息,请参见LICENSE

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java实现双锁并发队列   java如何更改SpringWS 2.4.4版或更高版本中maxOccurs的默认限制?   java Selenium RC如何处理动态行?   java何时引入Javac StringBuilder/StringBuffer优化?   java mediaplayer在R.raw Android上失败   java JPA2:不区分大小写,就像在任何地方匹配一样   如何从JDK15中提取java预览类文件?   java与mySQL删除查询不一致   从Shutdownow()返回的java列表<Runnable>无法转换为提交的Runnable   java如何从回调接口获取对象值?   java如何获得视图的高度,在xml中可见性和高度定义为wrap_内容?   postgresql Mybatis在启动时遇到“由以下原因引起:java.net.UnknownHostException:localhost”,为什么?   带有实例调用的方法调用的java intellij格式化程序换行   由于特定的第三方库,java Proguard产生运行时错误   动画JAVA JPanel同时滑出和滑入