답변:
버전 2.4 이상인 경우 apache-utils 패키지 htpasswd
에서 (ab) 사용할 수 있습니다 .
htpasswd -bnBC 10 "" password | tr -d ':\n'
-b
두 번째 명령 인수에서 암호를 가져옵니다
-n
. 파일에 쓰는 대신 해시를 stdout에 인쇄 합니다. bcrypt
-B
를 사용하도록 명령
-C 10
하면 bcrypt 비용 이 10으로 설정됩니다.
bare htpasswd 명령은 <name> : <hash> 형식 으로 두 줄 바꿈을 출력합니다. 따라서 이름에 빈 문자열이 tr
있고 콜론과 줄 바꿈이 제거됩니다.
이 명령은 $2y$
접두어로 bcrypt를 출력 하는데, 일부 용도에서는 문제가 될 수 있지만 사용 sed
하는 OpenBSD 변형 $2a$
은를 사용하여 고정 된 crypt_blowfish 변형과 호환 되므로 다른 것으로 쉽게 고칠 수 있습니다 $2y$
.
htpasswd -bnBC 10 "" password | tr -d ':\n' | sed 's/$2y/$2a/'
htpasswd 매뉴얼 페이지 링크 : https://httpd.apache.org/docs/2.4/programs/htpasswd.html
bcrypt 변형에 대한 세부 사항 : /programming//a/36225192/6732096
파이썬 라이브러리를 사용할 수 있습니다. 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=
sudo
을 실행할 필요가 없으며 dnf search
표준 사용자로서 잘 작동합니다.
log_rounds
변경 한 것으로 보인다 rounds
그것을 만들기 python -c 'import bcrypt; print(bcrypt.hashpw("password", bcrypt.gensalt(rounds=10)))'
.
@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 $?
root
사용자의 BASH 및 mySQL 기록 의 경우에 대한 심볼릭 링크를 만드는 것이 좋습니다 /dev/null
.