跳转到主要内容

使用bcrypt或pbkdf2编码的密码管理器实用工具。与zope.password结合使用很有用。

项目描述

z3c.bcrypt

z3c.bcrypt提供与zope.password兼容的“密码管理器”实用工具,使用bcrypt(或替代的pbkdf2)编码来存储密码。

这两种编码方案都实现在本包依赖的cryptacular库中。

使用z3c.bcrypt

>>> from zope.interface.verify import verifyObject
>>> from zope.password.interfaces import IPasswordManager
>>> from z3c.bcrypt import BcryptPasswordManager
>>> manager = BcryptPasswordManager()
>>> verifyObject(IPasswordManager, manager)
True
>>> password = u"right \N{CYRILLIC CAPITAL LETTER A}"
>>> encoded = manager.encodePassword(password)
>>> encoded
'$2a$...'
>>> manager.checkPassword(encoded, password)
True
>>> manager.checkPassword(encoded, password + u"wrong")
False
>>> from z3c.bcrypt import PBKDF2PasswordManager
>>> manager = PBKDF2PasswordManager()
>>> verifyObject(IPasswordManager, manager)
True
>>> encoded = manager.encodePassword(password)
>>> encoded
u'$p5k2$...'
>>> manager.checkPassword(encoded, password)
True
>>> manager.checkPassword(encoded, password + u"wrong")
False
>>> # A previously encoded password, should be decodable even if the
>>> # current encoding of the same password is different::
>>> previouslyencoded = (
...     '$p5k2$1000$LgAFPIlc9CgrlSaxHyTUMA='
...     '=$IuUYplhMkR4qCl8-ONRVjEgJNwE=')
>>> encoded == previouslyencoded
False
>>> manager.checkPassword(previouslyencoded , password)
True

过长的“密码”将占用大量计算时间,这可以被用作DOS攻击向量。z3c.bcrypt中的密码管理器将只使用传入密码的前4096个字符进行检查。

这受到以下灵感的启发

https://django.ac.cn/weblog/2013/sep/15/security/

如果没有4096长度的限制,此测试将显著变长。XXX如何可靠地进行测试?

>>> incomming = '$p5k2$1000$' + 'a' * 1024 * 1024 * 100  # lot of data.
>>> manager.checkPassword(encoded, incomming)
False

配置

此包提供了一个configure.zcml,它将IPasswordManager的实现作为实用工具安装

>>> from zope.configuration import xmlconfig
>>> _ = xmlconfig.string("""
... <configure
...    xmlns="http://namespaces.zope.org/zope">
...
...    <include package="z3c.bcrypt" />
... </configure>
... """)
>>> from zope import component
>>> from zope.password.interfaces import IPasswordManager
>>> component.getUtility(IPasswordManager, name='bcrypt')
<z3c.bcrypt.passwordmanager.BcryptPasswordManager object at ...>
>>> component.getUtility(IPasswordManager, name='pbkdf2')
<z3c.bcrypt.passwordmanager.PBKDF2PasswordManager object at ...>

z3c.bcrypt的变更日志

2.0.1 (2018-08-01)

2.0.0 (2017-05-10)

  • 标准化命名空间__init__。

  • 支持Python 3.4、3.5、3.6和PyPy。

1.2 (2013-10-10)

1.1 (2010-02-22)

  • configure.zcml的修复。

1.0 (2010-02-18)

  • 首次公开发布。

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

z3c.bcrypt-2.0.1.tar.gz (7.6 kB 查看哈希)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面