答え1
htpasswd
あなたは以下の(乱用)を使用することができますApacheユーティリティパッケージ(バージョン2.4以上の場合)
htpasswd -bnBC 10 "" YOUR_PASSWORD | tr -d ':\n'
-b
2番目のコマンド引数からパスワードを取得すると、
-n
ハッシュをファイルに書き込むのではなくstdoutに印刷します。 bcryptを設定するために
-B
bcryptを使用する方法
-C 10
コスト10まで
ベア htpasswd コマンドは、次の形式で出力されます。<名前>:<ハッシュ>以下は2つの改行文字です。したがって、名前は空の文字列であり、tr
コロンと改行文字は削除されます。
このコマンドは、$2y$
接頭辞付きのbcryptを出力します。これは一部の用途では問題になる可能性がありますが、使用されているsed
OpenBSDバリアントは$2a$
使用されている固定crypt_blowfishバリアントと互換性があるため、他の用途では簡単に修正できます$2y$
。
htpasswd -bnBC 10 "" YOUR_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
答え2
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=
答え3
Apacheがインストールされていないとhtpasswdが利用できないため、これはFreeBSDに関連しています。 @meuhの答えに基づいて、FreeBSDでPython3を使用してパスワードのbcryptハッシュを取得する方法は次のとおりです(例:traefik刑務所の基本認証用)。
以下は刑務所を想定した内容ですのでご注意ください。基本OSの場合は、pipを注意して使用してください。 FreeBSD バージョンと現在利用可能な Python3 バージョンに基づいて Python3 バージョンを調整します。
pkg install py37-pip
pip install bcrypt
実行し、Python 3バージョンを再調整します。
python3.7 -c 'import bcrypt; print(bcrypt.hashpw(b"PASSWORD", bcrypt.gensalt(rounds=15)).decode("ascii"))'
@Stuart Cardallは、これがあなたのパスワードを履歴書に記録することを正しく指摘しています。このPython3フラグメントをインポートし、ユーザー名とパスワードを求めるメッセージを表示して拡張するには、「読者に任せてください」。これにより、この情報はps
出力または履歴に最終的に表示されません。
答え4
正解の補足@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 $?