コマンドラインからbcryptハッシュを計算する

コマンドラインからbcryptハッシュを計算する

計算したいパスワード私のパスワードのハッシュです。

これを行うことができるオープンソースのコマンドラインツールはありますか?

私はSyncthing設定ファイルでこのハッシュを使用します。ここから設定ファイルを編集し、guiセクションからユーザーとパスワードを削除してからSyncthingを再起動すると、パスワードをリセットできます。

答え1

htpasswdあなたは以下の(乱用)を使用することができますApacheユーティリティパッケージ(バージョン2.4以上の場合)

htpasswd -bnBC 10 "" YOUR_PASSWORD | tr -d ':\n'

-b2番目のコマンド引数からパスワードを取得すると、
-nハッシュをファイルに書き込むのではなくstdoutに印刷します。 bcryptを設定するために
-Bbcryptを使用する方法
-C 10コスト10まで

ベア htpasswd コマンドは、次の形式で出力されます。<名前>:<ハッシュ>以下は2つの改行文字です。したがって、名前は空の文字列であり、trコロンと改行文字は削除されます。

このコマンドは、$2y$接頭辞付きのbcryptを出力します。これは一部の用途では問題になる可能性がありますが、使用されているsedOpenBSDバリアントは$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 $?

関連情報