SSHA एक नमकीन SHA-1 है। डिफ़ॉल्ट रूप से अंतिम 4 बाइट्स नमक हैं। Slappasswd का आउटपुट है
'{<Hash Method>}<base64 converted hash and salt>'
तो यह जांचने के लिए कि क्या एक सादा पाठ पासवर्ड नमकीन SHA के बराबर है, आपको इसकी आवश्यकता है:
- हैश विधि-निर्दिष्टक को उदाहरण के लिए पट्टी के साथ पट्टी करें।
- बेस 64 स्ट्रिंग को डीकोड करें
- अंतिम 4 बाइट्स निकालें, यह नमक है
- सादे पाठ पासवर्ड के लिए नमक को मिलाएं
- हैश
- तुलना
बेस 64-डिकोडेड स्ट्रिंग में बाइनरी रूप में हैश होता है और इसे मुद्रित नहीं किया जा सकता है, इसलिए हम इसे ओएक्स के साथ हेक्स में बदल देंगे। पहले 3 चरण निम्नलिखित कोड द्वारा किए जा रहे हैं:
#!/bin/bash
output=$(slappasswd -h {SSHA} -s password)
hashsalt=$( echo -n $output | sed 's/{SSHA}//' | base64 -d)
salt=${hashsalt:(-1),(-4)}
echo $output
echo $(echo -n $hashsalt | od -A n -t x1)
echo "Salt: $salt"
उत्पादन हो सकता है:
{SSHA}fDu0PgKDn1Di9W1HMINpPXRqQ9jTYjuH
7c 3b b4 3e 02 83 9f 50 e2 f5 6d 47 30 83 69 3d 74 6a 43 d8 d3 62 3b 87
<------------------------- Hash --------------------------> <-- Salt-->
Salt: ▒b;▒
तो अब हमें नमक को प्लेन टेक्स्ट पासवर्ड में बदलना है और हैश करना है, इस बार बिना नमकीन के! मुझे जो समस्या समझ में आ रही थी, वह यह है कि नमक वास्तव में किसी भी वर्ण का हो सकता है, जिसमें गैर-मुद्रण योग्य वर्ण भी शामिल हैं। इन गैर-मुद्रण योग्य वर्णों को संक्षिप्त करने के लिए हम प्रिंटफ़ और उनके हेक्साडेसिमल निरूपण का उपयोग करेंगे:
slappasswd -h {SHA} -s $(printf 'password\xd3\x62\x3b\x87') | sed 's/{SHA}//' | base64 -d | od -A n -t x1
आउटपुट है:
7c 3b b4 3e 02 83 9f 50 e2 f5 6d 47 30 83 69 3d 74 6a 43 d8
जो ऊपर हैश के बराबर है। अब हमने सत्यापित कर लिया है कि 'पासवर्ड' नमकीन SHA से मेल खाता है।
धन्यवाद और आगे पढ़ने: http://cpansearch.perl.org/src/GSHANK/Crypt-SaltedHash-0.09/lib/Crypt/SaltedHash.pm
slappasswd
{SSHA}, या SHA-1 का नमकीन संस्करण है।