使用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个字符进行检查。
这受到以下灵感的启发
如果没有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)
由于zope.password的推出,此包已弃用。
2.0.0 (2017-05-10)
标准化命名空间__init__。
支持Python 3.4、3.5、3.6和PyPy。
1.2 (2013-10-10)
仅验证密码的前4096个字符,以防止通过重复提交大密码来通过拒绝服务攻击,占用服务器资源进行昂贵的哈希计算。
1.1 (2010-02-22)
configure.zcml的修复。
1.0 (2010-02-18)
首次公开发布。
项目详情
关闭
z3c.bcrypt-2.0.1.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3f12b07769d71596babb553a172088426ca2b92c28a034ecb948a138056c1f1f |
|
MD5 | 9d87b828fba7303e18c8d1cdcea41b6c |
|
BLAKE2b-256 | c36944e1fd04b264e9efc670f4d55e3da34ddfbf827d6bcdcb617f7f9c958a2f |