Python 3 Pasword Hassing Library
wachtwoord的Python项目详细描述
wachtwoord是一个非常简单的python 3特定密码哈希库。 它被写为没有现有的密码哈希库,最值得注意的是 fshp、passlib、cryha和Bcryptor支持python 3。
支持的哈希方案
目前只支持一个特定的哈希方案:PBKDF2。
important0.12及以下版本未实现pbkdf2 正确地。这个版本直接从规范中实现pbkdf2 详见RFC2898。通过公开测试对实现进行测试 矢量(RFC6070)
基本用法
因为python 3对unicode之间的区别非常严格 字符串和字节字符串,wachtwoord被设计为提供一个统一的接口 通过要求所有输入都是unicode字符串并将unicode字符串生成为 独家输出。
wachtwoord支持hashlib模块中的所有哈希函数。长度 盐的数量(默认值:32)和迭代次数(默认值:10000)是 可配置。
两种操作模式
Wachtwoord有两种操作模式。小初始化 (可能会失败)与密码散列和 两者都是一次性完成的。前者在使用多个密码时更方便 需要一个接一个的散列。另一个在散列时更方便 是偶然的。
未来对wachtwoord的哈希方案扩展可能会使初始化 部分更贵。对于PBKDF2方案,差别非常小。
分开初始化和散列
>>> from wachtwoord.pbkdf2 import Engine
>>> engine = Engine()
>>> hash_encoded_password = engine.hash('secret_123')
>>> print(hash_encoded_password)
pbkdf2$sha512$10000$2qf1oL9GU0gq+Zf2+vWmuliL0WizwvyFUMWV3jG3o/M=$gzSkk0/WjTHACyaeDBe3czNdI+3iukVUm3f+vzNop2b/LwLQWf0r8WKv1TfzWaqYOnPH8vC3tDTBxdGDzEDYRw==
>>>
>>> is_correct_password = engine.verify('secret_123', hash_encoded_password)
>>> print(is_correct_password)
True
>>>
Engine对象允许设置影响所有 随后生成的哈希。例如,假设我们要使用 sha256hash函数而不是默认的sha512hash函数:
>>> from wachtwoord.pbkdf2 import Engine >>> engine = Engine(digestmod='sha256') >>>
同样,如果我们想改变salt的大小和迭代次数,我们会 按如下方式调用引擎:
>>> from wachtwoord.pbkdf2 import Engine >>> engine = Engine(digestmod='sha256', iterations=20000, salt_size=64) >>>
一次性初始化和散列化
>>> from wachtwoord.pbkdf2 import hash_password, verify_password >>> hash_encoded_password = hash_password('secret_123') >>> print(hash_encoded_password) pbkdf2$sha512$10000$f6ULrQBJspk6JiwHiEDL8fpFLCf90mOAxAM1LCY4dO0=$xzCLvTdp7eQUuY5pfgFl33dx7/uGIMaeZ5Bm5hmLTMx43zi/OCiNgORRmkb5KfkjxRDkD7VNc/45DbHX1zDhcA== >>> >>> is_correct_password = verify_password('secret_123', hash_encoded_password) >>> print(is_correct_password) True >>>
初始化和散列一次完成的事实并不能阻止 我们不更改默认值。我们可以把hash_passwordas 如下:
>>> from wachtwoord.pbkdf2 import hash_password >>> hash_encoded_password = hash_password('secret_123', digestmod='sha256', iterations=20000, salt_size=64)
名称wachtwoord的来源
wachtwoord是荷兰语密码。