为您的软件和服务器提供现代密码散列
项目描述
bcrypt
为您的软件和服务器提供可接受的密码散列(但您实际上应该使用 argon2id 或 scrypt)
安装
要安装 bcrypt,只需
$ pip install bcrypt
注意,如果您的系统中已安装 C 编译器和 Rust 编译器,bcrypt 应该可以在 Linux 上非常容易地构建(最低支持的 Rust 版本是 1.56.0)。
对于 Debian 和 Ubuntu,以下命令将确保安装所需的依赖项
$ sudo apt-get install build-essential cargo
对于 Fedora 和 RHEL 衍生版,以下命令将确保安装所需的依赖项
$ sudo yum install gcc cargo
对于 Alpine,以下命令将确保安装所需的依赖项
$ apk add --update musl-dev gcc cargo
替代方案
虽然 bcrypt 仍然是一个可接受的密码存储选择,但根据您的特定用例,您可能还希望考虑使用 scrypt(通过 标准库 或 cryptography)或通过 argon2_cffi 使用 argon2id。
变更日志
4.2.0
提升 Rust 依赖版本
移除了环境变量 BCRYPT_ALLOW_RUST_163。
4.1.3
提升 Rust 依赖版本
4.1.2
发布 py37 和 py39 轮文件。这应该可以解决与每个进程多次初始化模块相关的某些错误。
4.1.1
修复了 kdf 方法的类型签名。
修复了 Windows 上的打包错误。
修复了与 passlib 包检测假设的不兼容性。
4.1.0
停止支持 Python 3.6。
将 MSRV 提升至 1.64。(注意:可以通过设置 BCRYPT_ALLOW_RUST_163 环境变量来使用 Rust 1.63)
4.0.1
我们现在构建 PyPy manylinux 轮文件。
修复了将无效的 salt 传递给 checkpw 可能导致 pyo3_runtime.PanicException 的错误。现在它正确地引发了一个 ValueError。
4.0.0
bcrypt 现在使用 Rust 实现。从源代码构建的用户需要有一个 Rust 编译器。下载轮文件的用户不会有任何变化。
我们不再提供 manylinux2010 轮文件。用户应升级到最新的 pip,以确保这不会在他们的平台上下载轮文件时引起问题。我们现在为足够新的平台上的用户提供 manylinux_2_28 轮文件。
现在允许在输入中包含 NUL 字节。
3.2.2
修复了轮文件中 py.typed 文件的打包,以便 mypy 可以工作。
3.2.1
添加了对 z/OS 上编译的支持。
bcrypt 的下一个版本将是 4.0,它将在编译时需要 Rust,对于从源代码构建的用户。对于从轮文件安装的用户,没有额外的要求。大多数平台上的用户可以通过确保他们有一个最新的 pip 来获取轮文件。最低支持的 Rust 版本是 1.56.0。
这将是最后提供 manylinux2010 轮文件的版本。从现在起,我们轮文件的最低支持的 manylinux ABI 将是 manylinux2014。绝大多数用户将继续接收 manylinux 轮文件,只要他们有一个最新的 pip。
3.2.0
为库函数添加了类型提示。
停止支持低于 3.6 的 Python 版本(2.7,3.4,3.5)。
发布了 abi3 Windows 轮文件(需要 pip >= 20)。
3.1.7
为 PEP517 轮文件构建设置了 setuptools 下限。
我们不再分发 32 位 manylinux1 轮文件。继续生产它们是一个维护负担。
3.1.6
添加了对 Haiku 上编译的支持。
3.1.5
添加了对 AIX 上编译的支持。
停止支持 Python 2.6 和 3.3。
将 Python 3 的轮文件切换到使用 abi3。如果您在兼容平台上没有获取到轮文件,请升级您的 pip 版本。
3.1.4
修复了 mingw 和 illumos 上的编译问题。
3.1.3
修复了 Solaris 上的编译问题。
在 kdf 中使用太少的轮数时添加了警告。
3.1.2
修复了影响大端平台的编译问题。
修复了 Python 3.6 上的无效转义序列警告。
修复了 Python 2 上在非 UTF8 环境中构建的问题。
3.1.1
解决了与 cffi 1.8.3 一起使用时出现的 UserWarning。
3.1.0
添加了对 checkpw 的支持,这是一个用于验证密码的便利方法。
确保当您输入一个 $2y$ salt 时,您得到一个 $2y$ 散列。
修复了 $2a 散列容易受到环绕错误的影响的回归问题。
修复了 Alpine Linux 下的编译问题。
3.0.0
将 C 后端切换到从 OpenBSD 项目获得的代码,而不是 openwall。
通过 kdf 函数添加了对 bcrypt_pbkdf 的支持。
2.0.0
当调用 gensalt 时增加了可调整的前缀支持。
切换到 CFFI 1.0+
用法
密码哈希
哈希密码然后检查密码是否与之前的哈希密码匹配非常简单
>>> import bcrypt
>>> password = b"super secret password"
>>> # Hash a password for the first time, with a randomly-generated salt
>>> hashed = bcrypt.hashpw(password, bcrypt.gensalt())
>>> # Check that an unhashed password matches one that has previously been
>>> # hashed
>>> if bcrypt.checkpw(password, hashed):
... print("It Matches!")
... else:
... print("It Does not Match :(")
KDF
从 3.0.0 版本开始,bcrypt 现在提供了一个 kdf 函数,它实现了 bcrypt_pbkdf。此 KDF 用于 OpenSSH 的新加密私钥格式。
>>> import bcrypt
>>> key = bcrypt.kdf(
... password=b'password',
... salt=b'salt',
... desired_key_bytes=32,
... rounds=100)
可调整的工作因子
bcrypt 的一个特性是可调整的对数工作因子。要调整工作因子,只需将所需的轮数传递给 bcrypt.gensalt(rounds=12),默认为 12。
>>> import bcrypt
>>> password = b"super secret password"
>>> # Hash a password for the first time, with a certain number of rounds
>>> hashed = bcrypt.hashpw(password, bcrypt.gensalt(14))
>>> # Check that a unhashed password matches one that has previously been
>>> # hashed
>>> if bcrypt.checkpw(password, hashed):
... print("It Matches!")
... else:
... print("It Does not Match :(")
可调整的前缀
bcrypt 的另一个特性是可调整的前缀,允许您定义与哪些库保持兼容。要调整此设置,请传递 2a 或 2b(默认值)到 bcrypt.gensalt(prefix=b"2b"),作为字节对象。
从 3.0.0 版本开始,$2y$ 前缀在 hashpw 中仍然受支持,但已弃用。
最大密码长度
bcrypt 算法仅处理最多 72 个字符的密码,超出部分的字符将被忽略。为了解决这个问题,常用的方法是使用加密哈希(如 sha256)来哈希密码,然后使用 base64 编码以防止 NULL 字节问题,在将结果与 bcrypt 哈希之前。
>>> password = b"an incredibly long password" * 10
>>> hashed = bcrypt.hashpw(
... base64.b64encode(hashlib.sha256(password).digest()),
... bcrypt.gensalt()
... )
兼容性
此库应与 py-bcrypt 兼容,并且可在 Python 3.6+ 和 PyPy 3 上运行。
安全性
bcrypt 遵循与 cryptography 相同的安全策略,如果您发现漏洞,请私下与我们联系。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码发行版
构建分发版
bcrypt-4.2.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cf69eaf5185fd58f268f805b505ce31f9b9fc2d64b376642164e9244540c1221 |
|
MD5 | 0f84413ae0378bace440df5c9b317bc6 |
|
BLAKE2b-256 | e47ed95e7d96d4828e965891af92e43b52a4cd3395dc1c1ef4ee62748d0471d0 |
bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f4f4acf526fcd1c34e7ce851147deedd4e26e6402369304220250598b26448db |
|
MD5 | e4f203bab219afa0061af374cb9929b8 |
|
BLAKE2b-256 | ca4603eb26ea3e9c12ca18d1f3bf06199f7d72ce52e68f2a1ebcfd8acff9c472 |
bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 39e1d30c7233cfc54f5c3f2c825156fe044efdd3e0b9d309512cc514a263ec2a |
|
MD5 | 85d0374f20f1a0c656e76ece631d8aa3 |
|
BLAKE2b-256 | 099701026e7b1b7f8aeb41514408eca1137c0f8aef9938335e3bc713f82c282e |
bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 373db9abe198e8e2c70d12b479464e0d5092cc122b20ec504097b5f2297ed184 |
|
MD5 | 7bbdb22f4342e136b4ce0d2b0f258862 |
|
BLAKE2b-256 | 8b7976a139d1b9f11aa4afcb7ceb882d2e81003667681711f2fe8a302c4c10ca |
bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1ff39b78a52cf03fdf902635e4c81e544714861ba3f0efc56558979dd4f09170 |
|
MD5 | 396aa9f680ce58f820860524404f33fb |
|
BLAKE2b-256 | 735a811c3c7af3be99888f39ee8845ddf849d2a03a83049d63ece5dfb4612f4d |
bcrypt-4.2.0-cp39-abi3-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 61ed14326ee023917ecd093ee6ef422a72f3aec6f07e21ea5f10622b735538a9 |
|
MD5 | c69611ea736510fb34ac350d42f40799 |
|
BLAKE2b-256 | 1c2ac74052e54162ec639266d91539cca7cbf3d1d3b8b36afbfeaee0ea6a1702 |
bcrypt-4.2.0-cp39-abi3-win32.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 77800b7147c9dc905db1cba26abe31e504d8247ac73580b4aa179f98e6608f34 |
|
MD5 | 343da646e80e75280b6dab871257edd5 |
|
BLAKE2b-256 | 24551a7127faf4576138bb278b91e9c75307490178979d69c8e6e273f74b974f |
bcrypt-4.2.0-cp39-abi3-musllinux_1_2_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cb2a8ec2bc07d3553ccebf0746bbf3d19426d1c6d1adbd4fa48925f66af7b9e8 |
|
MD5 | a62e6f4669e0e5cec0ecc339f3cae4d0 |
|
BLAKE2b-256 | 1ad4586b9c18a327561ea4cd336ff4586cca1a7aa0f5ee04e23a8a8bb9ca64f1 |
bcrypt-4.2.0-cp39-abi3-musllinux_1_2_aarch64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8ac68872c82f1add6a20bd489870c71b00ebacd2e9134a8aa3f98a0052ab4b0e |
|
MD5 | 7a6733187f9cd85c4ace8e0aa2757e7a |
|
BLAKE2b-256 | 75fe9e137727f122bbe29771d56afbf4e0dbc85968caa8957806f86404a5bfe1 |
哈希值 for bcrypt-4.2.0-cp39-abi3-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 27fe0f57bb5573104b5a6de5e4153c60814c711b29364c10a75a54bb6d7ff48d |
|
MD5 | 616fb2508be9011dfefde72306a67eed |
|
BLAKE2b-256 | 5d2c019bc2c63c6125ddf0483ee7d914a405860327767d437913942b476e9c9b |
哈希值 for bcrypt-4.2.0-cp39-abi3-musllinux_1_1_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9c1c4ad86351339c5f320ca372dfba6cb6beb25e8efc659bedd918d921956bae |
|
MD5 | e1faf38edb85e22bca71a16ab2d9f9e4 |
|
BLAKE2b-256 | e7c3dae866739989e3f04ae304e1201932571708cb292a28b2f1b93283e2dcd8 |
哈希值 for bcrypt-4.2.0-cp39-abi3-manylinux_2_28_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3d3a6d28cb2305b43feac298774b997e372e56c7c7afd90a12b3dc49b189151c |
|
MD5 | 07519243297c7bd1d9b7c0d6db555167 |
|
BLAKE2b-256 | 3ed031938bb697600a04864246acde4918c4190a938f891fd11883eaaf41327a |
哈希值 for bcrypt-4.2.0-cp39-abi3-manylinux_2_28_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8d7bb9c42801035e61c109c345a28ed7e84426ae4865511eb82e913df18f58c2 |
|
MD5 | bfe069eb0eb229cc4e8a0d4ca73bd5b5 |
|
BLAKE2b-256 | cc14b9ff8e0218bee95e517b70e91130effb4511e8827ac1ab00b4e30943a3f6 |
哈希值 for bcrypt-4.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3413bd60460f76097ee2e0a493ccebe4a7601918219c02f503984f0a7ee0aebe |
|
MD5 | 58c86881de23d410a4bb58c6fa4679c2 |
|
BLAKE2b-256 | 4b3bad784eac415937c53da48983756105d267b91e56aa53ba8a1b2014b8d930 |
哈希值 for bcrypt-4.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3bbbfb2734f0e4f37c5136130405332640a1e46e6b23e000eeff2ba8d005da68 |
|
MD5 | bfc1b47e5ce9d3c6754d69a19a588814 |
|
BLAKE2b-256 | f605e394515f4e23c17662e5aeb4d1859b11dc651be01a3bd03c2e919a155901 |
哈希值 for bcrypt-4.2.0-cp39-abi3-macosx_10_12_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c52aac18ea1f4a4f65963ea4f9530c306b56ccd0c6f8c8da0c06976e34a6e841 |
|
MD5 | 90065575ab30ceedc8675cfd1fa66373 |
|
BLAKE2b-256 | 96868c6a84daed4dd878fbab094400c9174c43d9b838ace077a2f8ee8bc3ae12 |
哈希值 for bcrypt-4.2.0-cp37-abi3-musllinux_1_2_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 762a2c5fb35f89606a9fde5e51392dad0cd1ab7ae64149a8b935fe8d79dd5ed7 |
|
MD5 | 9b66692c8a934ef4775344769cf12884 |
|
BLAKE2b-256 | dc5d6843443ce4ab3af40bddb6c7c085ed4a8418b3396f7a17e60e6d9888416c |
哈希值 for bcrypt-4.2.0-cp37-abi3-musllinux_1_2_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3698393a1b1f1fd5714524193849d0c6d524d33523acca37cd28f02899285060 |
|
MD5 | 81bdb63bb8494f972b83e491a4e5441f |
|
BLAKE2b-256 | 00032af7c45034aba6002d4f2b728c1a385676b4eab7d764410e34fd768009f2 |
哈希值 for bcrypt-4.2.0-cp37-abi3-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0da52759f7f30e83f1e30a888d9163a81353ef224d82dc58eb5bb52efcabc399 |
|
MD5 | 148b78400616e13d0789db7d111547eb |
|
BLAKE2b-256 | 7b762aa660679abbdc7f8ee961552e4bb6415a81b303e55e9374533f22770203 |
哈希值 for bcrypt-4.2.0-cp37-abi3-musllinux_1_1_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1ee38e858bf5d0287c39b7a1fc59eec64bbf880c7d504d3a06a96c16e14058e7 |
|
MD5 | da8a848049f51765b86ae0881fbbdc91 |
|
BLAKE2b-256 | b0b88b4add88d55a263cf1c6b8cf66c735280954a04223fcd2880120cc767ac3 |
哈希值 用于 bcrypt-4.2.0-cp37-abi3-manylinux_2_28_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 655ea221910bcac76ea08aaa76df427ef8625f92e55a8ee44fbf7753dbabb328 |
|
MD5 | 720dfa963aa08c64f4f08a6de7073b8c |
|
BLAKE2b-256 | acbeda233c5f11fce3f8adec05e8e532b299b64833cc962f49331cdd0e614fa9 |
哈希值 用于 bcrypt-4.2.0-cp37-abi3-manylinux_2_28_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1bb429fedbe0249465cdd85a58e8376f31bb315e484f16e68ca4c786dcc04291 |
|
MD5 | 95d426dd6e5ca7849f51d4a3b7d1bb75 |
|
BLAKE2b-256 | 4654dc7b58abeb4a3d95bab653405935e27ba32f21b812d8ff38f271fb6f7f55 |
哈希值 用于 bcrypt-4.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1d84cf6d877918620b687b8fd1bf7781d11e8a0998f576c7aa939776b512b98d |
|
MD5 | 4e5fb6cb00ed702c01b7b368d0884b96 |
|
BLAKE2b-256 | e3967a654027638ad9b7589effb6db77eb63eba64319dfeaf9c0f4ca953e5f76 |
哈希值 用于 bcrypt-4.2.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c02d944ca89d9b1922ceb8a46460dd17df1ba37ab66feac4870f6862a1533c00 |
|
MD5 | 8975a39420620f5b6f69f1f77883a8ca |
|
BLAKE2b-256 | 05d21be1e16aedec04bcf8d0156e01b987d16a2063d38e64c3f28030a3427d61 |
哈希值 用于 bcrypt-4.2.0-cp37-abi3-macosx_10_12_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 096a15d26ed6ce37a14c1ac1e48119660f21b24cba457f160a4b830f3fe6b5cb |
|
MD5 | 1cc30667b44b5555c9402a4bb26a6170 |
|
BLAKE2b-256 | a9814e8f5bc0cd947e91fb720e1737371922854da47a94bc9630454e7b2845f8 |