Dis*_*ler 54
您可以(ab)htpasswd
从apache-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=
.
小智 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
输出或历史记录中可见。