Answers:
您可以(ap)htpasswd从apache-utils软件包中使用,前提是您拥有2.4或更高版本。
htpasswd -bnBC 10 "" password | tr -d ':\n'
-b从第二个命令参数获取密码,将
-n哈希值打印到stdout,而不是将其写入文件,
-B指示使用bcrypt
-C 10将bcrypt 成本设置为10
htpasswd裸命令以<name>:<hash>格式输出,后跟两个换行符。因此,将使用空字符串作为名称,tr并删除冒号和换行符。
该命令输出带$2y$前缀的bcrypt ,这在某些用途中可能会出现问题,但sed由于使用的OpenBSD变体$2a$与的固定crypt_blowfish变体兼容,因此可能容易被另一个使用固定$2y$。
htpasswd -bnBC 10 "" password | tr -d ':\n' | sed 's/$2y/$2a/'
链接到htpasswd手册页:https
://httpd.apache.org/docs/2.4/programs/htpasswd.html有关bcrypt变体的详细信息:https : //stackoverflow.com/a/36225192/6732096
您可以使用Python库。在我的Fedora系统上,我做了:
sudo dnf search bcrypt
(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
安装Python2版本并在包中列出文件:
sudo dnf install py-bcrypt.x86_64
rpm -ql py-bcrypt.x86_64
这表明有一个文件,/usr/lib64/python2.7/site-packages/bcrypt/__init__.py所以我可以通过
pydoc bcrypt
这足以让我写出下面的命令来对字符串进行哈希处理"password":
$ python -c 'import bcrypt; print(bcrypt.hashpw("password", bcrypt.gensalt(log_rounds=10)))'
$2a$10$vWFRZgbOx6RKOKYxCTtyWuMJM60E90Vdm/.0nj.X/o3dYUxvQ/2Dm
供更高版本bcrypt使用rounds=代替log_rounds=。
sudo运行dnf search,它可以作为标准用户正常运行。
log_rounds似乎已更改为roundsmake python -c 'import bcrypt; print(bcrypt.hashpw("password", bcrypt.gensalt(rounds=10)))'。
@Disassembler的答案的补充:
ps)15 平衡复杂性/密码生成速度htpasswd&的包装器脚本bcrypt:
#!/bin/sh
## bcrypt passwd generator ##
#############################
CMD=$(which htpasswd 2>/dev/null)
OPTS="-nBC 15"
USERNAME=$1
usage() {
local script=$(basename $0)
cat <<EOF
$script: Generate Bcrypt Hashed Passwords using htpasswd
Usage: $script username
EOF
exit 1
}
check_config() {
if [ -z $CMD ]; then
printf "Exiting: htpasswd is missing.\n"
exit 1
fi
if [ -z "$USERNAME" ]; then
usage
fi
}
check_config $USERNAME
printf "Generating Bcrypt hash for username: $USERNAME\n\n"
$CMD $OPTS $USERNAME
exit $?
root最好创建到的符号链接/dev/null。