それを行うオープンソースのコマンドラインツールはありますか?
私はこのハッシュをSyncthing構成ファイルで使用します(知っている場合でも ここから 構成ファイルを編集してパスワードをリセットし、guiセクションでユーザーとパスワードを削除して、Syncthingを再起動できます)。 。
バージョン2.4以降を使用している場合は、Apache-utilsパッケージのhtpasswd
を(ab)使用できます。
htpasswd -bnBC 10 "" password | tr -d ':\n'
-b
は、2番目のコマンド引数からパスワードを取得します-n
は、ハッシュをファイルに書き込む代わりにstdoutに出力します-B
はbcryptを使用するように指示します-C 10
は、bcryptcostを10に設定します
裸のhtpasswdコマンドは、<name>:<hash>という形式で出力され、その後に2つの改行が続きます。したがって、名前の空の文字列とtr
は、コロンと改行を取り除きます。
このコマンドは$2y$
接頭辞付きのbcryptを出力しますが、一部の用途では問題になる可能性がありますが、$2a$
を使用するOpenBSDバリアントは修正されたcrypt_blowfishバリアントと互換性があるため、別のsed
で簡単に修正できます。 $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=
を使用してください。
@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 $?