छाया के लिए SHA-512 हैशेड पासवर्ड कैसे बनाएं?


62

पिछले एसएफ सवालों को मैंने देखा है कि एमडी 5 हैशेड पासवर्ड का जवाब देने के लिए नेतृत्व किया है।

किसी को भी एक SHA-512 हैशेड पासवर्ड का उत्पादन करने के लिए एक सुझाव है? मैं एक स्क्रिप्ट के बजाय एक लाइनर पसंद करूंगा, लेकिन, यदि कोई स्क्रिप्ट एकमात्र समाधान है, तो यह ठीक भी है।

अपडेट करें

पिछले py2 संस्करणों को इस एक के साथ बदलना:

python3 -c "import crypt;print(crypt.crypt(input('clear-text pw: '), crypt.mksalt(crypt.METHOD_SHA512)))"

4
SHA और MD5 एन्क्रिप्शन नहीं हैं । वे हैशिंग एल्गोरिदम हैं। महत्वपूर्ण अंतर यह है कि हैशेड डेटा पुनर्प्राप्त करने योग्य नहीं है। तुम्हें क्या करने की ज़रूरत है?
स्मॉलक्लैंगर

धन्यवाद। सवाल को संशोधित किया। man 5 shadowइसे "एन्क्रिप्टेड पासवर्ड" के रूप में संदर्भित किया जाता है, इसलिए मैं उस शब्द के साथ चला गया।
बेलमिन फर्नांडीज

2
माफ़ अगर वह थोड़ा सा कर्कश था। क्या आप मैन्युअल रूप से छाया-संगत पासवर्ड हैश उत्पन्न करने की कोशिश कर रहे हैं? यदि हां, तो अपनी /etc/shadowसामग्री पर एक नज़र डालें । आप देखेंगे $x$salt$hash। आधुनिक लिनेक्स पर विशिष्ट होने के साथ, xद्वारा उपयोग किए गए एल्गोरिदम को दर्शाता है , जो कि sha512 (देखें ) है। नीचे दिए गए उत्तरों में से एक ही हैश का उत्पादन करेगा, इसलिए जब तक आप इसे एक ही नमक नहीं देते। crypt6man 3 crypt
SmallClanger

2
अरे नहीं, बिल्कुल नहीं झपकी। आपने कुछ स्पष्ट किया जिसके बारे में मुझे भ्रम था इसलिए मैं बहुत आभारी हूँ सर!
बेलमिन फर्नांडीज

1
धन्यवाद! पासलिब-आधारित केवल एक ही है जिसे मैंने ओएस एक्स पर काम करने में सक्षम किया है।
स्टिग ब्रूटसेट

जवाबों:


65

यहाँ एक लाइनर है:

python -c 'import crypt; print crypt.crypt("test", "$6$random_salt")'

पायथन 3.3+ mksaltमें क्रिप्ट शामिल है , जो इसे उपयोग करने के लिए बहुत आसान (और अधिक सुरक्षित) बनाता है:

python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'

आप एक तर्क प्रदान नहीं करते हैं करने के लिए crypt.mksalt(इसे स्वीकार कर सकता है crypt.METHOD_CRYPT, ...MD5, SHA256, और SHA512), यह सबसे मजबूत उपलब्ध का प्रयोग करेंगे।

हैश की आईडी (पहले के बाद की संख्या $) इस्तेमाल की गई विधि से संबंधित है:

  • 1 -> एमडी 5
  • 2a -> ब्लोफिश (मेनलाइन ग्लिबक में नहीं; कुछ लिनक्स वितरण में जोड़ा गया)
  • 5 -> SHA-256 (glibc 2.7 के बाद से)
  • 6 -> SHA-512 (glibc 2.7 के बाद से)

मैं आपको यह देखने की सलाह दूंगा कि लवण क्या होते हैं और जैसे और जैसे कि छोटे वर्ग एन्क्रिप्शन और हैशिंग के बीच अंतर बताते हैं।

अद्यतन 1: उत्पादित स्ट्रिंग छाया और किकस्टार्ट स्क्रिप्ट के लिए उपयुक्त है। अद्यतन 2: चेतावनी। यदि आप एक मैक का उपयोग कर रहे हैं, तो एक मैक पर अजगर में इसका उपयोग करने के बारे में टिप्पणी देखें जहां यह अपेक्षा के अनुरूप काम नहीं करता है।


5
random_saltएक वास्तविक यादृच्छिक नमक के साथ बदलें ।
बेलमिन फर्नांडीज

6
मुझे यह योसमाइट में काम करने के लिए नहीं मिल सकता है। यह वह है जो बाहर थूकता है: $6asQOJRqB1i2- यह सही होने के लिए लगभग लंबे समय तक नहीं लगता है!
स्टिग ब्रूटसेट

3
क्रिप्ट मॉड्यूल को आपके लिए नमक बनाते हैं:python -c 'import crypt; print crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512))'
रौज़ेना

2
डिफ़ॉल्ट रूप से glibc केवल 5000 राउंड का उपयोग करता है जो इन दिनों काफी कमजोर है। आप उदाहरण के लिए, "$ राउंड = ###" जोड़कर राउंड की संख्या निर्दिष्ट कर सकते हैं crypt.crypt("test", "$6$rounds=200000$random_salt"):। 200000 मेरे वर्तमान लैपटॉप पर लगभग 100ms लेता है।
अपरिपक्व

2
इसे कम से कम मैक पर इस्तेमाल नहीं किया जाना चाहिए। एक मैक (10.13.5) पर यह हर बार एक ही गलत परिणाम देता है।
ऑस्करपर्सन

37

डेबियन पर आप अलग-अलग हैशिंग एल्गोरिदम के साथ पासवर्ड बनाने के लिए mkpasswd का उपयोग कर सकते हैं / etc / shadow। यह पैकेज whois (उपयुक्त फ़ाइल के अनुसार) में शामिल है

mkpasswd -m sha-512
mkpasswd -m md5

उपलब्ध हैशिंग अल्गोरिटम्स प्रकार की सूची प्राप्त करने के लिए:

mkpasswd -m help 

HTH


3
क्या पैकेज यह प्रदान करता है? mkpasswdफेडोरा के तहत भी एक कार्यक्रम (उम्मीद का हिस्सा) है, लेकिन यह इस उद्देश्य के लिए बेकार है।
बजे क्रिस्टियन सियुपिटु

जैसा कि उन्होंने कहा, वह जिस संस्करण mkpasswdकी बात कर रहे हैं वह डेबियन / उबंटू के लिए है। mkpasswdफेडोरा पर (कम से कम 14 तक) याद आ रही है -mस्विच।
SLM

3
उत्सुकता से, यह डेइस पैकेज है, डेबियन से विरासत। देखिए dpkg -S /usr/bin/mkpasswdमैं खुद इस पर विश्वास नहीं कर सकता: D
Rbjz

पासवर्ड जांचने के लिए, यदि पहला अंक 6 है, तो नमक के रूप में दूसरे और तीसरे डॉलर के बीच के भाग का उपयोग करें। उदाहरण के लिए root:$6$AbCdE$xyz:...आप का उपयोग करना चाहिए mkpasswd -m sha-512 -S AbCdE:। सही पासवर्ड के साथ, आपको वही हैश मिलना चाहिए।
ल्यूक

24

सर्वश्रेष्ठ उत्तर: ग्रब-क्रिप्ट

Usage: grub-crypt [OPTION]...
Encrypt a password.

-h, --helpPrint this message and exit
-v, --version           Print the version information and exit
--md5                   Use MD5 to encrypt the password
--sha-256               Use SHA-256 to encrypt the password
**--sha-512             Use SHA-512 to encrypt the password (default)**

1
सरल समाधान .. मेरे लिए CentOS 6.
बंजर

4
जिन सिस्टमों पर grub-cryptकमांड होती है, यह वास्तव में सबसे मूर्ख और सुविधाजनक तरीका है। जब आप इसे पेंच कर सकते हैं, तो मैन्युअल रूप से लवण के साथ खेलने का कोई मतलब नहीं है। समस्या यह है कि अधिक से अधिक आधुनिक प्रणालियों में GRUB2 है और इस प्रकार यह कमांड शामिल नहीं होगी।
rsaw

11

यहां विभिन्न यूनिक्स प्रकार के ओएस पर SHA-512 पासवर्ड उत्पन्न करने के लिए एक छोटा सी कोड है।

फ़ाइल: passwd-sha512.c

#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
  if ( argc < 3 || (int) strlen(argv[2]) > 16 ) {
    printf("usage: %s password salt\n", argv[0]);
    printf("--salt must not larger than 16 characters\n");
    return;
  }

  char salt[21];
  sprintf(salt, "$6$%s$", argv[2]);

  printf("%s\n", crypt((char*) argv[1], (char*) salt));
  return;
}

संकलन करना:

/usr/bin/gcc -lcrypt -o passwd-sha512 passwd-sha512.c

उपयोग:

passwd-sha512 <password> <salt (16 chars max)>

यह सवाल 3 साल पुराना है ...
क्रोधी

यह टिप्पणी इतनी पुरानी नहीं है। प्यारा ऐप जो आपको वहां मिला, वह केवल 1 उत्तर है, जबकि 1up भी, जबकि यह मैन पेज उदाहरण की तरह दिखता है :)
सम्पो सरला

4

SHA-512 हैशेड पासवर्ड उत्पन्न करने के लिए पर्ल वन-लाइनर समाधान:

perl -le 'print crypt "desiredPassword", "\$6\$customSalt\$"'

RHEL 6 पर काम किया


2

सेंटोस / आरएचईएल मशीनों के लिए निम्नलिखित जांच और संशोधन क्यों न करें, यह सुनिश्चित करने के लिए कि सभी पासवर्ड हैशिंग / etc / छाया के लिए sha512 के साथ किया गया है। फिर आप बस पासवार्ड कमांड के साथ अपना पासवर्क सामान्य रूप से सेट कर सकते हैं

#Set stronger password hasing
/usr/sbin/authconfig --test | grep sha512 > /dev/null
if [ $? -ne 0 ]; then
echo "Configuring sha512 password hashing"
sudo /usr/sbin/authconfig --enableshadow --passalgo=sha512 --updateall
fi

2

यहां एक वन-लाइनर है जो एक यादृच्छिक नमक के साथ SHA-512 हैशेड पासवर्ड बनाने के लिए शेल कमांड का उपयोग करता है:

[रूट @ होस्ट] mkpasswd -m sha-512 MyPAsSwOrD $ (खुलता है rand -base64 16 | tr -d '+ =' | head -c 16)

टिप्पणियाँ

  1. आपको "हूइस" पैकेज (डेबियन, सुएसई, आदि) स्थापित करने की आवश्यकता हो सकती है, जो "mkpasswd" प्रदान करता है।
  2. "/ Etc / छाया" में लाइनों के प्रारूप पर विवरण के लिए क्रिप्ट (3) देखें।

दुर्भाग्य whoisसे फेडोरा 18 से पैकेज कोई प्रदान नहीं करता है mkpasswd
बजे क्रिस्टियन सियुपिटु

1
आर्क लिनक्स में: / usr / bin / mkpasswd का स्वामित्व अपेक्षा से 5.45-3 है
Nowaker

फेडोरा 20 पर भी और यह कुछ और करता है।
क्रिस्टियन सियुपिटु

2
दुर्भाग्य से सुझाए गए कमांड में दो समस्याएं हैं: 1) आपूर्ति किया गया पासवर्ड अब आपके शेल के इतिहास में संग्रहीत है, और 'इतिहास' कमांड या समान के साथ किसी को भी दिखाई देता है। 2) आपको कमांड लाइन पर यादृच्छिक नमक की आपूर्ति करने की आवश्यकता नहीं है - और मुझे लगता है कि आपको कायरता खुलने वाले ट्रिक्स का उपयोग करने के बजाय इसे mkpasswd करने देना चाहिए। (ध्यान दें कि यह उबंटू क्वांटल पर कम से कम सच है। आप इसे कई बार 'mkpasswd -m sha-512 foo' पर चलाकर देख सकते हैं। आप नमक में परिवर्तन देखेंगे। नमक 2 और 3 $ वर्णों के बीच का मान है। )
ऑस्करपर्सन

2

इस उत्तर के सुरक्षा निहितार्थ के बारे में जानने के लिए नीचे टिप्पणी पढ़ें

रूबी मानसिकता वालों के लिए यहाँ एक-लाइनर है:

'password'.crypt('$6$' + rand(36 ** 8).to_s(36))

1
यह गलत है: रूबी का रैंड फ़ंक्शन सुरक्षित नहीं है - यह एक PRNG का उपयोग करता है, इसलिए इससे ऐसे परिणाम उत्पन्न होंगे जो आपके द्वारा चलाए गए पल के समय / स्थिति के अनुमान के आधार पर रिवर्स-इंजीनियर हो सकते हैं।
ऑस्करपियरसन

1

इस स्क्रिप्ट ने उबंटू 12.04 LTS: https://gist.github.com/JensRantil/ac691a4854a4f6cb4bd9 पर मेरे लिए काम किया

#!/bin/bash
read -p "Enter username: " username
read -s -p "Enter password: " mypassword
echo
echo -n $username:$mypassword | chpasswd -S -c SHA512

इसकी निम्नलिखित विशेषताएं हैं जिनमें से कुछ अन्य विकल्पों की कमी है:

  • यह अपने नमक को सुरक्षित रूप से उत्पन्न करता है। किसी को भी मैन्युअल रूप से ऐसा करने पर भरोसा नहीं करना चाहिए। कभी।
  • यह शेल इतिहास में कुछ भी संग्रहीत नहीं करता है ।
  • स्पष्टता के लिए, यह प्रिंट करता है कि किस उपयोगकर्ता के पासवर्ड ने इसे उत्पन्न किया है जो कई उपयोगकर्ताओं के पासवर्ड बनाते समय अच्छा हो सकता है।

2
ध्यान दें कि यह chpasswdआपके सिस्टम में होने पर ही काम करेगा ।
मैट सैंडर्स

FYI करें: chpasswd समर्थन नहीं करता है-छाया-बर्तन में-4.1.5.1
सैसुपअप

0

एचएएसएच अल्गोस मैसेज डाइजेस्ट के उत्पादन के लिए हैं, वे कभी भी पासवर्ड के लिए उपयुक्त नहीं होते हैं, जिसमें किसी प्रकार के एलओएफ ( http://tools.ietf.org/rfc/rfc5869.txt ) का उपयोग करना चाहिए - पीबीकेडीएफ 2 या बीसीक्रिप्ट देखें


अच्छी बात है, लेकिन man cryptमुझे बताता है कि PBKDF2 समर्थित नहीं है।
Huygens

0
#!/usr/bin/env python

import getpass

from passlib.hash import sha512_crypt

if __name__ == "__main__":
    passwd = getpass.getpass('Password to hash: ')
    hash = sha512_crypt.encrypt(passwd)

    print hash

आप चाहें तो इसे मेरे गिथब रेपो से क्लोन कर सकते हैं: https://github.com/antoncohen/mksha


0

यह एक लाइनर नहीं है, लेकिन यह किसी की मदद कर सकता है:

import crypt, getpass, pwd, string, sys, random
randomsalt = ""
password = getpass.getpass()
choices = string.ascii_uppercase + string.digits + string.ascii_lowercase
for _ in range(0,8):
    randomsalt += random.choice(choices)
print crypt.crypt(password, '$6$%s$' % randomsalt)

random क्रिप्टोग्राफिक रूप से सुरक्षित नहीं है, os.urandom इसका उपयोग किया जाना चाहिए। 56 वर्ण लंबे शब्दकोश के 8 अक्षर वैसे भी बहुत कम हैं। अजगर में बार-बार डंक मारने पर भी इसका बुरा रूप होता है (इसमें O (n ^ 2) की जटिलता होती है)
ह्यूबर्ट करियो

0
$ htpasswd -c /tmp/my_hash user1
New password: 
Re-type new password: 
Adding password for user user1
$ cat /tmp/my_hash
user1:$apr1$oj1ypcQz$4.6lFVtKz2nr8acsQ8hD30

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


0

क्रिप्ट (3) के लिए मैन पेज पर एक नज़र डालें और मुझे लगता है कि आप पाएंगे कि क्रिप्ट टूल को ग्लिब्क और sha256 ($ 5) और sha512 ($ 6), कई राउंड, बहुत अधिक नमक और इतने पर उपयोग करने के लिए अपडेट किया गया है। ।

स्पष्ट रूप से SHA512 कैसे / etc / छाया काम करता है के लिए प्रासंगिक है।

उस ने कहा, यह वेब पेज बहुत मददगार था - विशेष रूप से MKPASSWD, क्योंकि इससे मेरी समस्या हल हो गई।

संभावित "लॉस्ट" पासवर्ड को देखते हुए, मैं SHP512 हैश उत्पन्न करने के लिए MKPASSWD और नमक का उपयोग कर सकता हूं, और उम्मीदवार पासवर्ड की सूची की पुष्टि / खंडन कर सकता हूं।

मैं जॉन द रिपर का उपयोग करूंगा - लेकिन कम से कम मेरे हार्डवेयर (रास्पबेरी पाई) और मेरे बजट (कुछ भी नहीं) पर - जॉन ऐसा नहीं कर सकता है (यह रास्पियन मुक्त संस्करण में उन्नत क्रिप्ट / ग्लिबैक सामान का समर्थन नहीं करता है।

आप पर ध्यान दें, क्योंकि मुझे पढ़ने / लिखने / आदि / छाया के लिए पर्याप्त अनुमति है, मैं अभी-अभी हैश को अधिलेखित करता हूं, और जीवन के साथ आगे बढ़ता हूं ... यह एक अकादमिक अभ्यास है।


नोट Glibc नोट इस फ़ंक्शन का glibc2 संस्करण अतिरिक्त encrypion tion एल्गोरिदम का समर्थन करता है।

   If salt is a  character  string  starting  with  the  characters
   "$id$" followed by a string terminated by "$":

          $id$salt$encrypted

   then instead of using the DES machine, id identifies the encryp‐
   tion method used and this then determines how the  rest  of  the
   password  string is interpreted.  The following values of id are
   supported:

          ID  | Method
          ─────────────────────────────────────────────────────────
          1   | MD5
          2a  | Blowfish (not in mainline glibc; added in some
              | Linux distributions)
          5   | SHA-256 (since glibc 2.7)
          6   | SHA-512 (since glibc 2.7)

   So  $5$salt$encrypted  is  an  SHA-256  encoded   password   and
   $6$salt$encrypted is an SHA-512 encoded one.

0

यदि आपको perl / python में लिखे गए वन-लाइनर्स के विकल्प की आवश्यकता है, mkpasswd एक अच्छा मैच है। जबकि यह डेबियन हूइस पैकेज में शामिल है, यह CentOS / RHEL सिस्टम पर गायब है। मैंने mkpasswd के डेबियन संस्करण को संशोधित किया है और ओपनएसएसएल पर आधारित एक मजबूत नमक उत्पादन तंत्र शामिल किया है। परिणामस्वरूप बाइनरी पूरी तरह से सभी डेबियन के संस्करण कमांड लाइन मापदंडों को संरक्षित करता है। कोड जीथब पर उपलब्ध है और किसी भी लिनक्स स्वाद पर संकलित करना चाहिए: mkpasswd


-4

मुझे यकीन नहीं है कि SHA-512 किस तरह से संबंधित है /etc/shadow। ये पासवर्ड cryptएड हैं।

लेकिन अगर आप SHA-512 के साथ एक पासवर्ड हैशेड चाहते हैं तो आप ऐसा कर सकते हैं echo -n the_password | sha512sum। आप / etc / छाया के लिए आउटपुट का उपयोग नहीं कर सकते।


2
echo -n the_passwordतो आप न्यूलाइन को हैशिंग नहीं कर रहे हैं। </
पेडेंट

shadowवर्ष के बाद से क्रिप्ट () एड किसी भी अधिक में पासवर्ड नहीं हैं। आधुनिक सिस्टम कम से कम md5 का उपयोग करते हैं।
अलेक्जेंडर जानसेन

6
वास्तव में पासवर्ड shadowअभी भी crypt()एड हैं, लेकिन फ़ंक्शन को कई अलग-अलग एल्गोरिदम का समर्थन करने के लिए अपडेट किया गया है। बावजूद, इस उत्तर में वर्णित विधि के लिए उपयुक्त हैश का उत्पादन नहीं होता है /etc/shadow। एल्गोरिथ्म एक SHA-512 हैश दौर की तुलना में अधिक जटिल है।
स्नैप करें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.