명령줄에서 bcrypt 해시 계산

명령줄에서 bcrypt 해시 계산

계산하고 싶어요비밀번호내 비밀번호의 해시입니다.

이를 수행할 수 있는 오픈 소스 명령줄 도구가 있습니까?

나는 Syncthing 구성 파일에서 이 해시를 사용할 것입니다.여기에서구성 파일을 편집하고 gui 섹션에서 사용자와 비밀번호를 삭제한 후 Syncthing을 다시 시작하면 비밀번호를 재설정할 수 있습니다.

답변1

htpasswd당신은 다음에서 (남용)을 사용할 수 있습니다아파치 유틸리티패키지(버전 2.4 이상인 경우)

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

-b두 번째 명령 인수에서 비밀번호를 얻으면
-n해시를 파일에 쓰는 대신 stdout에 인쇄합니다. bcrypt를 설정하기 위해
-Bbcrypt를 사용하는 방법
-C 10비용10까지

베어 htpasswd 명령은 다음 형식으로 출력됩니다.<이름>:<해시>다음은 두 개의 개행 문자입니다. 따라서 이름은 빈 문자열이며 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 $?

관련 정보