MD5, SHA-256 और अन्य हैश कैसे उत्पन्न करें
हैशिंग किसी भी इनपुट (एक पासवर्ड, एक फ़ाइल, एक संदेश) को निश्चित-लंबाई की वर्ण स्ट्रिंग में बदलता है। एक ही इनपुट हमेशा एक ही हैश उत्पन्न करता है, पर इनपुट में सबसे छोटा परिवर्तन भी पूरी तरह से अलग हैश पैदा करता है। यह हैशिंग को अखंडता सत्यापन, पासवर्ड भंडारण, डिजिटल हस्ताक्षर, ब्लॉकचेन प्रमाण, और आधुनिक कंप्यूटिंग के दर्जनों अन्य निर्माण खंडों के लिए आवश्यक बनाता है। सही एल्गोरिथम चुनना, यह जानना कि कुछ क्यों टूटे हैं, और हैश का दुरुपयोग करने वाले पैटर्न पहचानना एक पाँच-सेकंड के उपकरण को ऐसी नींव में बदल देता है जिस पर आप सुरक्षित रूप से निर्माण कर सकते हैं।
हैश फ़ंक्शनों का संक्षिप्त इतिहास
प्रोग्रामिंग विचार के रूप में हैशिंग क्रिप्टोग्राफ़ी से दशकों पहले की है, डेटा संरचनाओं में हैश तालिकाएँ बकेट में कुंजियों को फैलाने के लिए CRC और FNV जैसे साधारण फ़ंक्शनों का उपयोग करती हैं। क्रिप्टोग्राफ़िक हैश, जो अपरिवर्तनीय और टकराव-प्रतिरोधी होने के लिए डिज़ाइन किए गए हैं, 1980 के दशक के अंत में Ron Rivest के MD4 (1990) और MD5 (1991) के साथ उभरे। MD5 दो दशकों तक वास्तविक मानक बना रहा, जब तक व्यावहारिक टकरावों ने इसे सुरक्षा कार्य के लिए असुरक्षित बना दिया।
NIST का SHA-0 (1993) लगभग तुरंत वापस ले लिया गया और SHA-1 (1995) से बदला गया। SHA-1 अधिक टिका पर चरणों में गिरा: 2005 में सैद्धांतिक हमले, 2009 तक एक व्यावहारिक प्रमाणपत्र-जालसाजी परिदृश्य, और 2017 में Google का SHAttered प्रदर्शन, समान SHA-1 हैश वाले दो अलग PDF। SHA-2 परिवार (SHA-224, SHA-256, SHA-384, SHA-512), 2001 में प्रकाशित, दीर्घावधि प्रतिस्थापन के रूप में डिज़ाइन किया गया और आज भी सुरक्षित है। SHA-3 (Keccak, 2015 में मानकीकृत) संरचनात्मक रूप से भिन्न डिज़ाइन है, जो SHA-2 के गिर जाने पर बैकअप प्रदान करने के लिए है।
समानांतर रूप से, पासवर्ड-विशिष्ट हैश अलग से विकसित हुए। सादा MD5 या SHA-1 पासवर्ड भंडारण के लिए बहुत तेज़ निकला, इसलिए bcrypt (1999), scrypt (2009), और Argon2 (2015, Password Hashing Competition के विजेता) ने जानबूझकर धीमापन और स्मृति-कठोरता जोड़ी ताकि ब्रूट-फ़ोर्स हमलों को परिमाण के क्रम में अधिक महंगा बनाया जा सके। पासवर्ड के लिए सही हैश कभी भी फ़ाइल चेकसम के लिए सही हैश के समान नहीं होता।
हैशिंग कैसे काम करती है
एक हैश फ़ंक्शन किसी भी आकार का इनपुट लेता है और निश्चित आकार का आउटपुट उत्पन्न करता है:
| इनपुट | SHA-256 हैश (पहले 16 वर्ण) |
|---|---|
| hello | 2cf24dba5fb0a30e... |
| Hello | 185f8db32271fe25... |
| hello! | ce06092fb948d9ff... |
ध्यान दें कि एक वर्ण बदलना (छोटा h से बड़ा H) या एक वर्ण जोड़ना हैश को पूरी तरह बदल देता है। इसे एवलांच प्रभाव कहा जाता है और यही हैश को हर छोटे से छोटे परिवर्तन को पहचानने में उपयोगी बनाता है।
आंतरिक रूप से, एक आधुनिक हैश फ़ंक्शन अपने इनपुट को निश्चित आकार के ब्लॉकों (SHA-256 के लिए 64 बाइट्स, SHA-512 के लिए 128) में विभाजित करता है, प्रत्येक ब्लॉक को संपीड़न फ़ंक्शन से गुज़ारता है, और स्थिति को आगे जोड़ता है। आउटपुट अंतिम ब्लॉक के मिश्रित होने के बाद की अंतिम स्थिति है। चूँकि श्रृंखला हर बाइट पर निर्भर करती है, कोई शॉर्टकट नहीं है जो किसी हमलावर को पूरे हैश को फिर से लिखे बिना इनपुट बदलने दे।
एक अच्छे क्रिप्टोग्राफ़िक हैश में तीन सुरक्षा गुण होते हैं: पूर्व-छवि प्रतिरोध (आप ऐसा इनपुट नहीं ढूँढ सकते जो दिए गए हैश को उत्पन्न करे), दूसरी पूर्व-छवि प्रतिरोध (एक इनपुट दिए गए, आप उसी हैश वाला अलग इनपुट नहीं ढूँढ सकते), और टकराव प्रतिरोध (आप दो भिन्न इनपुट उसी हैश के साथ नहीं ढूँढ सकते)। MD5 तीनों में विफल; SHA-1 टकराव प्रतिरोध में विफल; SHA-2 और SHA-3 अभी भी तीनों धारण करते हैं।
सामान्य हैश एल्गोरिथम
| एल्गोरिथम | आउटपुट बिट्स | लंबाई | स्थिति | उपयोग के लिए |
|---|---|---|---|---|
| MD5 | 128 | 32 हेक्स | टूटा (असुरक्षित) | विरासत चेकसम, सुरक्षा के बाहर उपयोग |
| SHA-1 | 160 | 40 हेक्स | टूटा (असुरक्षित) | केवल विरासत सिस्टम |
| SHA-224 | 224 | 56 हेक्स | सुरक्षित (विशेष) | SHA-256 को प्राथमिकता दें |
| SHA-256 | 256 | 64 हेक्स | सुरक्षित | फ़ाइल अखंडता, डिजिटल हस्ताक्षर |
| SHA-384 | 384 | 96 हेक्स | सुरक्षित | TLS 1.3 साइफ़र सूट |
| SHA-512 | 512 | 128 हेक्स | सुरक्षित | उच्च सुरक्षा अनुप्रयोग, 64-बिट प्रदर्शन |
| SHA3-256 | 256 | 64 हेक्स | सुरक्षित | SHA-256 का भविष्य-सुरक्षित विकल्प |
| BLAKE2b / BLAKE3 | 256 या 512 | परिवर्तनीय | सुरक्षित, बहुत तेज़ | rsync, restic, थोक हैशिंग |
| HMAC-SHA256 | 256 | 64 हेक्स | सुरक्षित | API अनुरोध हस्ताक्षर |
| bcrypt | 184 | 60 वर्ण (कस्टम) | पासवर्ड के लिए सुरक्षित | पासवर्ड भंडारण |
| Argon2id | विन्यास योग्य | परिवर्तनीय | पासवर्ड के लिए सर्वोत्तम | आधुनिक पासवर्ड भंडारण |
| CRC32 | 32 | 8 हेक्स | केवल त्रुटि पहचान | सुरक्षा हैश नहीं |
अधिकांश सामान्य-उद्देश्य उपयोगों के लिए SHA-256 वर्तमान मानक है। MD5 और SHA-1 का उपयोग केवल तब करें जब विरासत सिस्टम के साथ इंटरैक्ट करने की आवश्यकता हो; सुरक्षा सीमाओं के लिए कभी नहीं। पासवर्ड के लिए bcrypt या Argon2id का उपयोग करें, कच्चा SHA-256 नहीं।
हैश कैसे उत्पन्न करें
- अपना एल्गोरिथम चुनें: ड्रॉपडाउन से MD5, SHA-1, SHA-256, SHA-384, या SHA-512 चुनें। SHA-256 का उपयोग करें जब तक कि किसी अन्य को चुनने का कोई विशिष्ट कारण न हो।
- टेक्स्ट दर्ज करें या फ़ाइल अपलोड करें: इनपुट बॉक्स में टेक्स्ट टाइप करें या चिपकाएँ, या एक फ़ाइल छोड़ें। उपकरण Web Crypto API का उपयोग करके हैश को पूरी तरह से आपके ब्राउज़र में चलाता है।
- हैश की प्रतिलिपि बनाएँ: परिणाम एक हेक्स स्ट्रिंग है जिसका उपयोग आप सत्यापन, भंडारण, या तुलना के लिए कर सकते हैं। कई उपकरण कॉम्पैक्ट भंडारण के लिए base64 एन्कोडिंग भी प्रदान करते हैं।
- आवश्यकता पड़ने पर तुलना करें: प्रकाशित हैश को अपने उत्पन्न हैश के पास चिपकाएँ और उपकरण को पहले भिन्न वर्ण को चिह्नित करने दें। 64-वर्ण स्ट्रिंग की दृश्य तुलना त्रुटि-प्रवण है।
व्यावहारिक उपयोग
फ़ाइल अखंडता सत्यापन: एक फ़ाइल डाउनलोड करें और इसके हैश की प्रकाशक के आधिकारिक हैश से तुलना करें। यदि वे मेल खाते हैं, तो फ़ाइल प्रामाणिक और अदूषित है। यह वह उपयोग का मामला है जो अधिकांश दैनिक हैश निर्माण को संचालित करता है, Linux पर हर sha256sum आह्वान के पीछे का प्रवाह और सॉफ़्टवेयर डाउनलोड पर हर चेकसम पृष्ठ।
पासवर्ड भंडारण, अनुप्रयोग पासवर्ड के हैश संग्रहीत करते हैं, पासवर्ड स्वयं नहीं। जब आप लॉग इन करते हैं, तो आपका इनपुट हैश किया जाता है और संग्रहीत हैश से तुलना की जाती है। महत्वपूर्ण विवरण यह है कि एल्गोरिथम जानबूझकर धीमा होना चाहिए (bcrypt, Argon2) ताकि हैश फ़ाइल चुराने वाला हमलावर इसे उचित समय में ब्रूट-फ़ोर्स न कर सके।
डेटा डीडुप्लिकेशन: भंडारण सिस्टम और बैकअप उपकरण डेटा के टुकड़ों को हैश करते हैं, अक्सर कुछ मेगाबाइट के ब्लॉक, और हैश को कुंजी के रूप में उपयोग करते हैं। एक ही हैश वाले दो टुकड़ों को समान माना जाता है, इसलिए दूसरी घटना केवल एक पॉइंटर संग्रहीत करती है। restic, borg, और कई क्लाउड बैकअप सेवाएँ इस पर निर्भर हैं।
डिजिटल हस्ताक्षर: एक डिजिटल हस्ताक्षर एक हैश है जिसे एक निजी कुंजी से एन्क्रिप्ट किया गया है। सत्यापनकर्ता दस्तावेज़ को हैश करता है, सार्वजनिक कुंजी से हस्ताक्षर को डिक्रिप्ट करता है, और जाँचता है कि दोनों मेल खाते हैं। यह सिद्ध करता है कि दस्तावेज़ बदला नहीं गया और हस्ताक्षरकर्ता ने इस सटीक संस्करण को स्वीकृत किया।
API सुरक्षा के लिए HMAC: HMAC एक हैश फ़ंक्शन को एक गुप्त कुंजी के साथ जोड़ता है, एक टैग उत्पन्न करता है जिसे उसी कुंजी वाला कोई भी व्यक्ति सत्यापित कर सकता है। Webhooks, AWS अनुरोध हस्ताक्षर, और कई आंतरिक RPC HMAC-SHA256 का उपयोग करते हैं ताकि रिसीवर जान सके कि अनुरोध वास्तव में एक भरोसेमंद स्रोत से आया।
ब्लॉकचेन और मर्कल पेड़: क्रिप्टोकरेंसी, सामग्री-संबोधनीय भंडारण (IPFS), और Git सभी एक ही रूट हैश के साथ बड़े डेटा सेट के लिए प्रतिबद्ध होने के लिए हैश पेड़ों का उपयोग करते हैं। पेड़ में कहीं भी एक बाइट बदलें, और रूट हैश बदल जाता है, यह वह गुण है जो डेटा को छेड़छाड़-स्पष्ट बनाता है।
कैश कुंजियाँ: कैश सिस्टम कॉम्पैक्ट लुकअप कुंजी उत्पन्न करने के लिए अनुरोध URL या क्वेरी पैरामीटर हैश करते हैं। CRC और SipHash यहाँ सामान्य हैं क्योंकि वे क्रिप्टोग्राफ़िक गारंटी पर गति को प्राथमिकता देते हैं।
हैश बनाम HMAC बनाम डिजिटल हस्ताक्षर
ये तीन अवधारणाएँ अक्सर भ्रमित होती हैं क्योंकि वे सभी समान दिखने वाली हेक्स स्ट्रिंग आउटपुट करती हैं।
| अवधारणा | इनपुट | सत्यापित करता है | सामान्य उपयोग |
|---|---|---|---|
| हैश | डेटा | हैश की गणना के बाद से डेटा नहीं बदला | चेकसम, सामग्री संबोधन |
| HMAC | डेटा + साझा गुप्त | डेटा अपरिवर्तित और गुप्त वाले किसी ने बनाया | API अनुरोध हस्ताक्षर, webhooks |
| डिजिटल हस्ताक्षर | डेटा + निजी कुंजी | डेटा अपरिवर्तित और विशिष्ट कुंजी से हस्ताक्षरित | TLS प्रमाणपत्र, सॉफ़्टवेयर हस्ताक्षर |
| एन्क्रिप्शन | डेटा + कुंजी (कोई भी) | डेटा ट्रांज़िट में गुप्त रखा गया | गोपनीयता (केवल अखंडता नहीं) |
एक सादा हैश इस बारे में कुछ नहीं सिद्ध करता कि इसे किसने बनाया। HMAC सिद्ध करता है कि भेजने वाले के पास साझा गुप्त था। एक हस्ताक्षर अतिरिक्त रूप से गुप्त साझा किए बिना हस्ताक्षरकर्ता की पहचान करता है। सबसे कमज़ोर उपकरण चुनें जो आपकी वास्तविक समस्या हल करता है।
सामान्य चूकें
- सुरक्षा के लिए MD5 या SHA-1 का उपयोग, दोनों क्रिप्टोग्राफ़िक रूप से टूटे हैं। टकराव सेकंडों में (MD5) या क्लाउड हार्डवेयर पर घंटों में (SHA-1) उत्पन्न किए जा सकते हैं। उन्हें सख्ती से गैर-सुरक्षा चेकसम तक सीमित रखें।
- सामान्य-उद्देश्य हैश से पासवर्ड हैश करना, पासवर्ड का सादा SHA-256 इतना तेज़ है कि चोरी हुए डेटाबेस वाला हमलावर GPU पर प्रति सेकंड अरबों अनुमान कर सकता है। इसके बजाय bcrypt, scrypt, या Argon2id का उपयोग करें।
- नमक भूलना, एक ही पासवर्ड वाले दो उपयोगकर्ताओं को कभी एक ही संग्रहीत हैश उत्पन्न नहीं करना चाहिए। नमकीन करना (हैशिंग से पहले प्रत्येक पासवर्ड में यादृच्छिक बाइट जोड़ना) इसे रोकता है और इंद्रधनुष तालिका लुकअप रोकता है।
- फ़ाइल के समान स्थान से परोसे हैश पर भरोसा, डाउनलोड मिरर से समझौता करने वाला हमलावर फ़ाइल और उसका हैश दोनों बदल सकता है। जब भी संभव हो, एक अलग डोमेन से हैश प्राप्त करें या हैश सूची पर GPG हस्ताक्षर सत्यापित करें।
- हेक्स बनाम base64 भ्रम, एक ही हैश 64 हेक्स वर्णों या 44 base64 वर्णों में एन्कोड होता है। भिन्न एन्कोडिंग की तुलना हमेशा विफल होगी। तुलना से पहले एन्कोडिंग मिलाएँ।
- सुरक्षा कोड में
==से तुलना, स्ट्रिंग तुलना पहले बेमेल वर्ण पर शॉर्ट-सर्किट करती है, जो समय की जानकारी लीक करती है। प्रमाणीकरण निर्णय लेने वाले किसी भी कोड में निरंतर-समय तुलना फ़ंक्शन का उपयोग करें। - स्थान बचाने के लिए हैश छोटा करना, SHA-256 के केवल पहले 8 वर्ण लेने से टकराव प्रतिरोध खगोलीय से तुच्छ में कट जाता है। या तो पूरा हैश संग्रहीत करें या छोटे आउटपुट के लिए डिज़ाइन किए गए हैश (SipHash) का उपयोग करें।
- सुरक्षा के लिए CRC का उपयोग, CRC32 आकस्मिक भ्रष्टाचार पकड़ने में अच्छा है पर जाली बनाना तुच्छ। कोई भी बाइट जोड़कर किसी CRC को किसी भी चयनित मान पर ला सकता है।
- PBKDF का उपयोग करने के बजाय फिर से हैश करना, SHA-256 को हाथ से दस हज़ार बार लूप करना क्लासिक घर का बना पासवर्ड हैश है; यह समय लीक करता है और अच्छी तरह से ऑडिट किए गए PBKDF2/bcrypt/Argon2 कार्यान्वयन से बहुत धीमा है।
- हैश को नमक के साथ रखना और हर लॉगिन पर एक ही हैश, हैश और नमक पढ़ने वाले हमलावर को केवल एक समय में एक पासवर्ड तोड़ने की आवश्यकता है, पर यदि आप सभी उपयोगकर्ताओं में एकल वैश्विक नमक का पुन: उपयोग करते हैं, तो एक इंद्रधनुष तालिका सबको तोड़ देती है। हर उपयोगकर्ता को एक नया यादृच्छिक नमक मिलता है।
वैकल्पिक उपकरण और पुस्तकालय
एक बार के हैश के लिए ब्राउज़र हैश जनरेटर सबसे तेज़ रास्ता है। बार-बार उपयोग या स्क्रिप्ट के लिए, कमांड-लाइन और भाषा पुस्तकालय कब्जा करते हैं।
| उपकरण | प्लेटफ़ॉर्म | ताकत | ध्यान दें |
|---|---|---|---|
| वेब हैश जनरेटर | ब्राउज़र | तत्काल, कोई इंस्टॉल नहीं, कोई अपलोड नहीं | एक समय में एक इनपुट |
sha256sum, md5sum | Linux | स्क्रिप्टेबल, GNU coreutils | --check SHA256SUMS फ़ाइलें पढ़ता है |
shasum -a 256 | macOS, BSD | OS के साथ बंडल | Linux से अलग बाइनरी नाम |
Get-FileHash | Windows PowerShell | Windows पर प्रथम श्रेणी | आउटपुट प्रारूप sha256sum से भिन्न |
openssl dgst -sha256 | क्रॉस-प्लेटफ़ॉर्म | यदि आपके पास पहले से OpenSSL है | समर्पित उपकरणों से धीमा |
b3sum / BLAKE3 CLI | क्रॉस-प्लेटफ़ॉर्म | बहु-GB/s थ्रूपुट | नया, कम सर्वव्यापी |
Python hashlib | Python | अंतर्निहित, सभी प्रमुख एल्गोरिथम | बाइट इनपुट से चिपके रहें |
Node crypto | Node.js | अंतर्निहित, Python के समान API | बड़ी फ़ाइलों के लिए स्ट्रीमिंग |
Web Crypto subtle.digest | ब्राउज़र JS | देशी, तेज़, कोई निर्भरता नहीं | केवल async API |
| HashiCorp Vault / KMS | क्लाउड | HMAC और हस्ताक्षर के लिए केंद्रीकृत कुंजी प्रबंधन | विक्रेता लॉक-इन |
पासवर्ड के लिए, भाषा पारिस्थितिकी तंत्र को अलग तरह से संभालें: bcrypt, argon2-cffi, passlib, या अपने प्लेटफ़ॉर्म का अनुशंसित एडाप्टर उपयोग करें, कभी हाथ से बना SHA लूप नहीं।
गोपनीयता और हैश जनरेटर
हैश जनरेटर पूरी तरह से आपके ब्राउज़र में चलता है। आप जो टेक्स्ट टाइप करते हैं वह Web Crypto SubtleCrypto इंटरफ़ेस के साथ मेमोरी में हैश होता है, और आप जो भी फ़ाइल चुनते हैं वह FileReader API के माध्यम से बिना अपलोड के स्ट्रीम होती है। कौन से इनपुट हैश किए गए इसका कोई लॉग नहीं, कौन से एल्गोरिथम लोकप्रिय हैं इस पर कोई विश्लेषण नहीं, और किसी के लिए भी यह पुनर्निर्माण करने का कोई तरीका नहीं कि आप क्या सत्यापित कर रहे थे। हैश स्वयं अक्सर संवेदनशील सामग्री का सारांश हैं, पासवर्ड, आंतरिक दस्तावेज़, निजी कुंजियाँ, बिल्कुल वही प्रकार का डेटा जिसे आपको किसी अजनबी के वेब फ़ॉर्म में कभी नहीं चिपकाना चाहिए। काम क्लाइंट-साइड करना इनपुट को आपकी मशीन पर रखता है, जहाँ वह है। चेकसम उत्पन्न करने जैसे नियमित कार्य के लिए, डिफ़ॉल्ट गोपनीयता होनी चाहिए: कुछ भी पेज नहीं छोड़ता, कुछ भी संग्रहीत नहीं होता, कुछ भी साझा नहीं होता।
अक्सर पूछे जाने वाले प्रश्न
MD5, SHA-1 और SHA-256 में क्या अंतर है?
MD5 एक 128-बिट हैश (32 हेक्स वर्ण) उत्पन्न करता है, SHA-1 160 बिट (40 वर्ण) उत्पन्न करता है और SHA-256 256 बिट (64 वर्ण) उत्पन्न करता है। MD5 और SHA-1 क्रिप्टोग्राफ़िक रूप से टूटे हुए माने जाते हैं। SHA-256 वर्तमान में सुरक्षित है और अखंडता सत्यापन और सुरक्षा के लिए अनुशंसित है।
क्या मूल डेटा प्राप्त करने के लिए हैश को उलटा जा सकता है?
नहीं। हैश फ़ंक्शन डिज़ाइन द्वारा एकतरफ़ा हैं। आप गणितीय रूप से हैश को उसके इनपुट पर वापस नहीं कर सकते। हालाँकि, सामान्य पासवर्ड प्री-कैलकुलेटेड टेबल (रेनबो टेबल) में पाए जा सकते हैं, यही वजह है कि हैशिंग से पहले पासवर्ड को सॉल्ट करना महत्वपूर्ण है।
HMAC क्या है?
HMAC (Hash-based Message Authentication Code) एक हैश फ़ंक्शन को एक गुप्त कुंजी के साथ जोड़ता है। यह डेटा की अखंडता और प्रामाणिकता दोनों को सत्यापित करता है, यह प्रमाणित करते हुए कि वे बदले नहीं गए हैं और गुप्त कुंजी जानने वाले किसी व्यक्ति द्वारा उत्पादित किए गए हैं।
क्या मेरा डेटा किसी सर्वर पर भेजा जाता है?
नहीं। सारा हैशिंग Web Crypto API के साथ आपके ब्राउज़र में चलता है। आपके टेक्स्ट और फ़ाइलें कभी आपके डिवाइस से बाहर नहीं जाते।
Why should I never use MD5 or SHA-1 for password storage even with a salt?
Both algorithms are extremely fast, which is the opposite of what you want for passwords. An attacker with a stolen hash file can try billions of guesses per second on a GPU. Password-hashing functions like bcrypt, scrypt, and Argon2 are deliberately slow and memory-hard, which forces attackers to spend orders of magnitude more time per guess.
When should I use SHA-512 instead of SHA-256?
On 64-bit CPUs, SHA-512 is often slightly faster than SHA-256 because its inner state and word size are tuned to 64-bit operations. Use SHA-512 when you want a longer digest (128 hex characters) for collision resistance margin, or when you are already in a SHA-512 ecosystem (TLS 1.3 with certain cipher suites, some HMAC implementations).