web-dev-qa-db-ja.com

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

パスワードの bcrypt ハッシュを計算したいと思います。

それを行うオープンソースのコマンドラインツールはありますか?

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

22

バージョン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

28
Disassembler

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=を使用してください。

11
meuh

@Disassemblerの回答への追加:

  • コマンドラインからパスワードを渡すことはお勧めしません(パスワードはpsで表示できるため)
  • 15は、複雑さ/パスワード生成速度のバランスが取れています

htpasswdbcryptのラッパースクリプト:

#!/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 $?
4
Stuart Cardall