답변1
htpasswd
당신은 다음에서 (남용)을 사용할 수 있습니다아파치 유틸리티패키지(버전 2.4 이상인 경우)
htpasswd -bnBC 10 "" YOUR_PASSWORD | tr -d ':\n'
-b
두 번째 명령 인수에서 비밀번호를 얻으면
-n
해시를 파일에 쓰는 대신 stdout에 인쇄합니다. bcrypt를 설정하기 위해
-B
bcrypt를 사용하는 방법
-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 $?