जवाबों:
आप Apache-utils के पैकेज htpasswd
से (ab) उपयोग कर सकते हैं , बशर्ते आपके पास संस्करण 2.4 या उच्चतर हो।
htpasswd -bnBC 10 "" password | tr -d ':\n'
-b
दूसरे कमांड तर्क से पासवर्ड लेता है
-n
, हैश को
-B
स्टडआउट करने के बजाय इसे एक फाइल पर लिखने के लिए प्रिंट
-C 10
करता है bcrypt का उपयोग करने का निर्देश देता है bcrypt लागत को 10 पर सेट करता है
नंगे htpasswd कमांड फॉर्मेट में <name>: <हैश> दो न्यूलाइन्स के बाद आउटपुट देता है। इसलिए tr
बृहदान्त्र और newlines नाम के लिए खाली स्ट्रिंग और।
कमांड प्रीफ़िक्स के साथ bcrypt को आउटपुट करता है $2y$
, जो कुछ उपयोगों के लिए समस्या हो सकती है, लेकिन आसानी से दूसरे द्वारा तय किया जा सकता है 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-673209696
आप पायथन लाइब्रेरी का उपयोग कर सकते हैं। अपने फेडोरा सिस्टम पर मैंने किया:
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
एक प्रतीकात्मक लिंक बनाना एक अच्छा विचार है /dev/null
।