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

z3c.bcrypt的Python项目详细描述


z3c.bcrypt

警告

z3c.bcrypt已被新版本的 zope.password因为它现在包括基于 维护良好的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://www.djangoproject.com/weblog/2013/sep/15/security/

如果4096长度限制 没有到位。如何可靠地测试?

>>> 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)

  • 标准化命名空间初始化。
  • 添加对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)

  • 首次公开发行。

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

推荐PyPI第三方库


热门话题
java语义理解递归反向字符串返回语句   java toString()方法打印空值   java大型IN子句   如何使用JavaSpring在JavaScriptjQuery中设置post路径   java ByteArrayOutputStream已上载到服务器   java为什么轮询在SocketIO上获取数据“无法加载请求的项”?   java源代码应该以UTF8格式保存   Java数据库轮询器?   在Java中将double转换为float   java AccessDeniedException:C:\Windows\System32\drivers\etc\hosts