कमांड लाइन पर SHA512 पासवर्ड हैश कैसे बनाएं


83

लिनक्स में मैं SHA1 पासवर्ड हैश का उपयोग करके बना सकता हूं sha1pass mypassword। क्या एक समान कमांड लाइन टूल है जो मुझे sha512हैश बनाने देता है ? Bcryptऔर के लिए एक ही सवाल PBKDF2


क्या आपका मतलब नहीं है sha1sum?

1
@ चिचोद्रोमा नहीं, वास्तव में एक sha1passआदेश है, डेबियन पर सिसलिनक्स-कॉमन पैकेज का हिस्सा है।
१।

2
वहाँ एक sha512sumआदेश है कि coreutils का हिस्सा है, और इसी तरह openssl sha512- लेकिन न तो अतिरिक्त सामान है कि sha1passकरता है।
कीथ थॉम्पसन

जवाबों:


55

हां, आप ढूंढ रहे हैं mkpasswd, जो (कम से कम डेबियन पर) whoisपैकेज का हिस्सा है । क्यों मत पूछो ...

anthony@Zia:~$ mkpasswd -m help
Available methods:
des     standard 56 bit DES-based crypt(3)
md5     MD5
sha-256 SHA-256
sha-512 SHA-512

दुर्भाग्य से, मेरा संस्करण कम से कम bcrypt नहीं करता है। यदि आपका सी लाइब्रेरी करता है, तो इसे (और मैनपावर को ताकत सेट करने के लिए -R विकल्प देता है) करना चाहिए। -R भी sha-512 पर काम करता है, लेकिन मुझे यकीन नहीं है कि इसका PBKDF-2 है या नहीं।

यदि आपको bcrypt पासवर्ड जनरेट करने की आवश्यकता है, तो आप इसे Crypt::Eksblowfish::Bcryptपर्ल मॉड्यूल के साथ उचित रूप से कर सकते हैं ।


70

Red Hat डिस्ट्रोस जैसे कि फेडोरा, CentOS, या RHEL कमांड में से mkpasswdकिसी में भी स्विच का समान सेट शामिल नहीं है क्योंकि संस्करण आमतौर पर डेबियन / उबंटू के साथ शामिल है।

नोट: आदेश mkpasswdवास्तव में expectपैकेज का हिस्सा है , और शायद बचा जाना चाहिए। आप यह पता लगा सकते हैं कि इनमें से किसी भी कमांड के साथ क्या पैकेज है।

$ yum whatprovides "*/mkpasswd"
-or-
$ repoquery -q --file */mkpasswd

उदाहरण

$ repoquery -q --file */mkpasswd
expect-0:5.43.0-8.el5.x86_64
expect-0:5.43.0-8.el5.i386

इन दोनों विधियों का उपयोग करने के लिए बेहतर है rpmक्योंकि पैकेजों को खोजने के लिए स्थापित करने की आवश्यकता नहीं है */mkpasswd

समाधान

इसके आसपास काम करने के लिए आप SHA-512 पासवर्ड बनाने के लिए निम्नलिखित पायथन या पर्ल वन-लाइनर्स का उपयोग कर सकते हैं। ध्यान दें कि ये नमकीन हैं:

अजगर (> = 3.3)

$ python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'

-या लिपिबद्ध-

$ python -c 'import crypt; print(crypt.crypt("somesecret", crypt.mksalt(crypt.METHOD_SHA512)))'

अजगर (2.x या 3.x)

$ python -c "import crypt, getpass, pwd; \
             print(crypt.crypt('password', '\$6\$saltsalt\$'))"

$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/

नोट: $ 6 $ पदनाम sha512 एल्गोरिथ्म को निर्दिष्ट करने की इस पद्धति के लिए समर्थन OS स्तर के क्रिप्ट (3) लाइब्रेरी फ़ंक्शन (आमतौर पर libcrypt) में समर्थन पर निर्भर है। यह अजगर संस्करण पर निर्भर नहीं है।

पर्ल

$ perl -e 'print crypt("password","\$6\$saltsalt\$") . "\n"'
$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/

इन उदाहरणों में पासवर्ड स्ट्रिंग "पासवर्ड" है और नमक "साल्टाल्ट" है। दोनों उदाहरण $ 6 $ का उपयोग कर रहे हैं जो दर्शाता है कि आप SHA-512 का उपयोग करना चाहते हैं।


2
अजगर वन-लाइनर के लिए, आप crypt.mksalt(crypt.METHOD_SHA512)निश्चित एक का उपयोग करने के बजाय नमक उत्पन्न करने के लिए उपयोग कर सकते हैं ।
जेक कॉब

2
@ जेककोब crypt.mksaltकेवल पायथन 3.x में उपलब्ध है
रिकार्डो मुरी

2
कमांड लाइन पर एक स्पष्ट-पाठ पासवर्ड टाइप करने से पहले सुनिश्चित करें कि आपके पास HISTCONTROL (यानी, CentOS / RHEL: echo 'एक्सपोर्ट HISTCONTROL = "इग्नोरडअप्स" - "etorespace "'> /etc/profile.d) पर" इग्नोरस्पेस "सेट है। /histcontrol.sh && स्रोत /etc/profile.d/histcontrol.sh)। अन्यथा, यह आपके ~ / .bash_history में सहेजा जाएगा।
पैट्रिक

3
पर्ल (और संभवतः अजगर) सिस्टम फ़ंक्शन "क्रिप्ट" का उपयोग करता है। इसलिए वे पोर्टेबल नहीं हैं, उन्हें एक क्रिप्ट फ़ंक्शन की आवश्यकता होती है जो अनुरोधित हैश प्रकार को समझता है। OSX क्रिप्ट नहीं है - यह सिर्फ मुझे एक पुरानी शैली डेस-एन्क्रिप्टेड स्ट्रिंग वापस देता है।
दान प्रिट्स

1
@ रिचर्डकोमुर्री मेरे पास 2.7.5 है और crypt.mksaltसेंटोस 7.1 पर पहुंच गया है
user12345

15

आप doveadmउपयोगिता का उपयोग कर सकते हैं , जो dovecotपैकेज में शामिल है ।

doveadm pw -s SHA512-CRYPT

परिणाम उदाहरण:

{SHA512-CRYPT}$6$0JvQ1LLFESzA16.I$JVdKAIq0igudTq06BMqzT9rL1gRawMPwLr9U3/kBMKUqZdONfa0wubC89C35LKl3aE16CRH57BfGb4ygPLggL1

बस {SHA512-CRYPT} को काटें और आपको अपना SHA512 हैशेड स्ट्रिंग मिलेगा।


मेरे लिए एक नियमित उपयोगकर्ता के रूप में काम नहीं करता है:doveadm(jotik): Fatal: Error reading configuration: stat(/etc/dovecot/dovecot.conf) failed: Permission denied (euid=1000(jotik) egid=100(users) missing +x perm: /etc/dovecot, we're not in group 97(dovecot), dir owned by 0:97 mode=0750)
jotik

12

यह आदेश चलाएँ:

$ /sbin/grub-crypt --sha-512

फिर उस शब्द को दर्ज करें जिसे आप हैशेड चाहते हैं।


-बैश: / sbin / grub-crypt: ऐसी कोई फ़ाइल या निर्देशिका नहीं
को Sheppard

मुझे विश्वास नहीं है कि ग्रब c7 पर है, इसलिए आप इसका उपयोग कर सकते हैं: अजगर -c 'आयात क्रिप्ट, गेटपास; प्रिंट (crypt.crypt (getpass.getpass), crypt.mksalt (crypt.METHOD_SHA512))) '
ucemike

3

ऊपर @ एसएलएम के वर्कअराउंड पर विस्तार करने के लिए, यदि आप किसी को अपने बैश इतिहास पर पकड़ बनाने और सादे टेक्स्ट पासवर्ड को देखने के बारे में चिंतित हैं, तो आप raw_input()अजगर के बयान में डाल सकते हैं जहां नमक और पासवर्ड फ़ील्ड चलते हैं, इसलिए यह उनके लिए आपको संकेत देता है। टाइप करते समय पाठ नकाबपोश नहीं है, लेकिन यह आपके बैश इतिहास में दिखाई नहीं देगा। आप एक प्रमुख स्थान के साथ कमांड भी शुरू कर सकते हैं, लेकिन मैं हमेशा ऐसा करना भूल जाता हूं।

python -c "import crypt, getpass, pwd; print crypt.crypt(raw_input(), '\$6\$' + raw_input() + '\$')"

2
आप अपनी फ़ाइल में bashस्थान जोड़ने के साथ उपसर्गों को रिकॉर्ड नहीं करने के लिए भी कॉन्फ़िगर कर सकते हैं । जब आप एक कमांड चलाते हैं तो आप अपने इतिहास से बाहर रखना चाहते हैं बस एक स्पेस टाइप करें फिर वास्तविक कमांड। HISTCONTROL=ignorespace.bashrc
थिलियन

1

sha512 htpasswd

कमांड जो उपयोगकर्ता और पासवर्ड के लिए पूछता है और एक नियमित htpasswd- फाइल बनाता है:

python -c 'import crypt,getpass; print(getpass.getpass("Name: ")+":"+crypt.crypt(getpass.getpass(),crypt.mksalt(crypt.METHOD_SHA512)))' >> htpasswd

सभी अजगर संस्करणों के साथ काम करता है> 2.5।



0

यदि आपका सिम सिम के जवाब से पायथन (> = 2.7) विधि का उपयोग कर रहा है और उत्पन्न होने से पहले अपने पासवर्ड की पुष्टि करना चाहता है - क्योंकि आप पासवर्ड को कम करते हैं ...

$ python -c 'import crypt,getpass;pw=getpass.getpass(); print(crypt.crypt(pw), crypt.mksalt(crypt.METHOD_SHA512) if (pw==getpass.getpass("Confirm: ")) else exit())'

इस उत्तर के 29 नवंबर, 2017 संस्करण में, यह कहता है कि यह अजगर 2.7 (या बाद में) के लिए काम करता है। Python2.7 के क्रिप्ट मॉड्यूल में मक्साल्ट () नहीं है। इसके अलावा, मुझे लगता है कि आप चाहते हैं कि crypt.mksalt () कॉल को crypt.crypt () (गलत पास पराग?) के लिए दूसरा arg कहे।
जुआन

0

लिनक्स पर "ओपनएसएसएल 1.1.1" संस्करण और मैकओएस पर md5_crypt का समर्थन करता है।

बस चलाएं और पासवर्ड डालें:

openssl passwd -crypt
Password:
Verifying - Password:
<results_into_a_md5_crypt_password>

या सीधे सीएलआई को सादा पाठ पासवर्ड प्रदान करें:

openssl password -crypt <plain_text_password_goes_here>
<results_into_a_md5_crypt_password>

-12

आप उपयोग कर सकते हैं sha512sum:

echo "password" | sha512sum

24
यह उत्तर गलत है। आदेश एक मान्य SHA-512 पासवर्ड हैश उत्पन्न नहीं करेगा । यह केवल स्ट्रिंग पासवर्ड \ n के चेकसम की गणना करेगा (ध्यान दें कि अंत में एक नई पंक्ति भी है)। यूनिक्स पासवर्ड हैश नमकीन हैं और दो "$" प्रतीकों के बीच एक हैश संस्करण कोड शामिल हैं। @Slm द्वारा उत्तर देखें।
जोर्मेल

अधिक विशेष रूप से, समस्या यह है कि जबकि पासवर्ड कुछ हद तक बाधित है, यह विधि एक en.wikipedia.org/wiki/Rainbow_table हमले के लिए असुरक्षित है ।
डिप्रैडडैनियल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.