Skip to main content

适用于您的软件和服务器的现代密码散列

项目描述

bcrypt

最新版本 https://github.com/pyca/bcrypt/workflows/CI/badge.svg?branch=main

您的软件和服务器可接受的密码散列

安装

要安装 bcrypt,只需:

$ pip install bcrypt

请注意,如果您有 C 编译器和 Rust 编译器(支持的最低 Rust 版本为 1.56.0),bcrypt 应该很容易在 Linux 上构建。

对于 Debian 和 Ubuntu,以下命令将确保安装所需的依赖项:

$ sudo apt-get install build-essential cargo

对于 Fedora 和 RHEL-derivatives,以下命令将确保安装所需的依赖项:

$ sudo yum install gcc cargo

对于 Alpine,以下命令将确保安装所需的依赖项:

$ apk add --update musl-dev gcc cargo

备择方案

虽然 bcrypt 仍然是密码存储的可接受选择,但根据您的特定用例,您可能还需要考虑使用 scrypt(通过标准库cryptography)或通过 argon2_cffi 使用argon2id

变更日志

4.0.0

  • bcrypt现在在 Rust 中实现。从源代码构建的用户需要有可用的 Rust 编译器。下载轮子的用户不会有任何改变。

  • 我们不再提供 manylinux2010轮子。用户应该升级到最新的 pip以确保这不会导致在他们的平台上下载轮子的问题。我们现在在足够新的平台上为用户提供许多linux_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。绝大多数用户将继续收到 许多 Linux轮子,只要他们有最新的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$盐时获得$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现在提供了一个执行bcrypt_pbkdf的kdf函数。此 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 的另一个特性是一个可调整的前缀,让您可以定义您将保持兼容的库。要对此进行调整,请将2a2b(默认值)作为字节对象传递给bcrypt.gensalt(prefix=b"2b") 。

从 3.0.0 开始, hashpw仍然支持$2y$前缀,但已弃用。

最大密码长度

bcrypt 算法只处理最多 72 个字符的密码,超出的任何字符都将被忽略。为了解决这个问题,一种常见的方法是使用加密哈希(例如sha256)对密码进行哈希处理,然后对其进行 base64 编码以防止在使用 bcrypt对结果进行哈希处理之前出现 NULL 字节问题:

>>> 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 上运行。

C代码

这个库使用来自 OpenBSD 的代码。

安全

bcrypt遵循与密码学相同的安全政策,如果您发现漏洞,我们要求您私下与我们联系。

下载文件

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

源分布

bcrypt-4.0.0.tar.gz (25.2 kB 查看哈希

已上传 source

内置发行版

bcrypt-4.0.0-cp36-abi3-win_amd64.whl (153.1 kB 查看哈希

已上传 cp36

bcrypt-4.0.0-cp36-abi3-win32.whl (159.9 kB 查看哈希

已上传 cp36

bcrypt-4.0.0-cp36-abi3-musllinux_1_1_x86_64.whl (624.6 kB 查看哈希

已上传 cp36

bcrypt-4.0.0-cp36-abi3-musllinux_1_1_aarch64.whl (614.6 kB 查看哈希

已上传 cp36

bcrypt-4.0.0-cp36-abi3-manylinux_2_28_x86_64.whl (594.4 kB 查看哈希

已上传 cp36

bcrypt-4.0.0-cp36-abi3-manylinux_2_28_aarch64.whl (584.8 kB 查看哈希

已上传 cp36

bcrypt-4.0.0-cp36-abi3-manylinux_2_24_x86_64.whl (594.0 kB 查看哈希

已上传 cp36

bcrypt-4.0.0-cp36-abi3-macosx_10_10_universal2.whl (475.0 kB 查看哈希

已上传 cp36