特洛伊亨特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连接usb到uart设备到安卓设备>3.1   可以强制Php中的web应用程序与Java中的桌面应用程序一起工作吗?   java为什么自定义系统类加载器不工作?   数组在Java中解析具有多个分隔符的字符串   PMD Java 8德米特定律   JavaSpringMVC表单验证不适用于嵌套的复杂类型   让Eclipse Java组织导入以使用Google checkstyle   java Appium:无法创建新会话   java如何在数组中声明新字段   java如何解决“无法初始化类org.apache.cassandra.config.DatabaseDescriptor”?   java AsyncTask创建socket   java向@CreatedBy添加更多信息   如何在ubuntu中运行包含大量jars依赖项的java文件   java如何使用<s:select>标记并在中休眠来填充下拉列表?   java获取错误:找不到符号变量“level”和“next_level_button”   javaweb应用中基于UI的ajax显示代码流   Java长到MySql   java JvisualVM:奇怪的应用程序行为   ubuntu将Java程序的输出结果保存到一个文件中