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
似乎已更改为rounds
make 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
。