从命令行计算 bcrypt 哈希

Gab*_*ers 40 password hashsum command

我想计算我的密码的bcrypt哈希值。

是否有一个开源命令行工具可以做到这一点?

我会在 Syncthing 配置文件中使用这个哈希(即使我从这里知道我可以通过编辑配置文件来重置密码以删除 gui 部分中的用户和密码,然后重新启动 Syncthing)。

Dis*_*ler 54

您可以(ab)htpasswdapache-utils包中使用,前提是您拥有 2.4 或更高版本。

htpasswd -bnBC 10 "" password | tr -d ':\n'
Run Code Online (Sandbox Code Playgroud)

-b从第二个命令参数中获取密码
-n将哈希打印到标准输出而不是将其写入文件
-B指示使用 bcrypt
-C 10将 bcrypt成本设置为 10

裸 htpasswd 命令以<name>:<hash>格式输出,后跟两个换行符。因此,名称为空字符串并tr去除冒号和换行符。

该命令输出带有$2y$前缀的bcrypt ,这对于某些用途来说可能是问题,但可以很容易地由其他人修复,sed因为使用的 OpenBSD 变体$2a$与使用$2y$.

htpasswd -bnBC 10 "" password | tr -d ':\n' | sed 's/$2y/$2a/'
Run Code Online (Sandbox Code Playgroud)

链接到 htpasswd 手册页:https
://httpd.apache.org/docs/2.4/programs/htpasswd.html 有关 bcrypt 变体的详细信息:https : //stackoverflow.com/a/36225192/6732096


meu*_*euh 12

您可以使用 Python 库。在我的 Fedora 系统上,我做了:

sudo dnf search bcrypt
Run Code Online (Sandbox Code Playgroud)

(sudo 只是为了避免浪费用户 dnf 缓存的空间)并且从结果可以看出有一个 Python2 和 Python3 包:

py-bcrypt.x86_64 : Python bindings for OpenBSD's Blowfish password hashing code
python3-py-bcrypt.x86_64 : Python 3 bindings for OpenBSD's Blowfish password hashing code
Run Code Online (Sandbox Code Playgroud)

安装Python2版本并列出包中的文件:

sudo dnf install py-bcrypt.x86_64
rpm -ql py-bcrypt.x86_64
Run Code Online (Sandbox Code Playgroud)

这表明有一个文件,/usr/lib64/python2.7/site-packages/bcrypt/__init__.py所以我可以用

pydoc bcrypt
Run Code Online (Sandbox Code Playgroud)

这表明我足以编写以下命令来散列字符串"password"

$ python -c 'import bcrypt; print(bcrypt.hashpw("password", bcrypt.gensalt(log_rounds=10)))'
$2a$10$vWFRZgbOx6RKOKYxCTtyWuMJM60E90Vdm/.0nj.X/o3dYUxvQ/2Dm
Run Code Online (Sandbox Code Playgroud)

对于更高版本的bcrypt使用rounds=而不是log_rounds=.

  • 截至 2018 年 4 月,参数 `log_rounds` 似乎已更改为 `rounds`,使其成为 `python -c 'import bcrypt; 打印(bcrypt.hashpw(“密码”,bcrypt.gensalt(rounds = 10)))'`。 (3认同)
  • +1。FTR 你不需要`sudo` 来运行`dnf search`,它作为标准用户运行良好。 (2认同)

小智 6

这与 FreeBSD 相关,因为如果不安装 apache,则 htpasswd 不可用。基于 @meuh 的答案,以下是如何在 FreeBSD 中使用 Python3 来获取密码的 bcrypt 哈希值 - 例如,用于 traefik 监狱中的基本身份验证。

请注意,以下假设是监狱。如果这是基本操作系统,请小心使用 pip。根据 FreeBSD 版本和当前可用的 Python3 版本调整 Python3 的版本。

pkg install py37-pip
pip install bcrypt
Run Code Online (Sandbox Code Playgroud)

并运行,再次调整Python 3版本:

python3.7 -c 'import bcrypt; print(bcrypt.hashpw(b"PASSWORD", bcrypt.gensalt(rounds=15)).decode("ascii"))'
Run Code Online (Sandbox Code Playgroud)

@Stuart Cardall 正确地指出,这将使您的密码载入史册。“留给读者”获取此 Python3 片段并通过提示输入用户名和密码进行扩展,以便此信息最终不会在ps输出或历史记录中可见。