SHA-256 इन 43 बाइट से 256-बिट डाइजेस्ट बनाता है। इनपुट का एक बिट पलटने पर डाइजेस्ट के 256 में से 141 बिट (55.1%) बदले। इसलिए लगभग समान इनपुट के डाइजेस्ट असंबंधित दिखते हैं।
एवलांच जाँच, SHA-256 (256 में से पहले 64 बिट)
इनपुट का डाइजेस्ट
1
1
0
1
0
1
1
1
1
0
1
0
1
0
0
0
1
1
1
1
1
0
1
1
1
0
1
1
0
0
1
1
0
0
0
0
0
1
1
1
1
1
0
1
0
1
1
1
1
0
0
0
0
0
0
0
1
0
0
1
0
1
0
0
पहले बाइट का बिट 0 पलटने के बाद डाइजेस्ट
1
0
0
0
1
0
1
0
1
1
0
0
1
1
1
0
0
0
1
0
1
1
0
1
0
0
1
1
1
0
0
1
0
0
0
1
0
1
1
0
0
1
1
0
0
0
0
1
0
0
0
0
0
1
1
1
0
1
1
0
1
1
1
1
अलग बिट
0
1
0
1
1
1
0
1
0
1
1
0
0
1
1
0
1
1
0
1
0
1
1
0
1
0
0
0
1
0
1
0
0
0
0
1
0
0
0
1
1
0
1
1
0
1
1
0
1
0
0
0
0
1
1
1
1
1
1
1
1
0
1
1
इनपुट का एक बिट बदलने पर बदले डाइजेस्ट बिट का अनुपात
गणना कैसे होती है S
पाठ को UTF-8 में बदलें
अक्षर: 43 → बाइट: 43 (344 बिट)।
पूरे ब्लॉक तक पैडिंग जोड़ें
blocks=⌊64n+8⌋+1=⌊6443+8⌋+1=1
एक 1 बिट, शून्य और संदेश की 64-बिट लंबाई जोड़ें, ताकि पैड किया संदेश 512 बिट का गुणज बने।
कम्प्रेशन फ़ंक्शन चलाएँ
1block×64rounds=64rounds
हर ब्लॉक आठ 32-बिट वर्ड की स्थिति बदलता है; ब्लॉक के बाद इसे चल रही स्थिति में वापस जोड़ा जाता है।
हैश जनरेटर और चेकसम कैलकुलेटर (MD5, SHA-256) के बारे में
क्रिप्टोग्राफिक हैश किसी भी इनपुट से निश्चित लंबाई का डाइजेस्ट बनाता है: MD5 के लिए 128 बिट, SHA-1 के लिए 160, SHA-256 के लिए 256 और SHA-512 के लिए 512 बिट। CRC-32 त्रुटियाँ पहचानने वाला 32-बिट चेकसम है। पाठ को UTF-8 बाइट में बदलकर 512 या 1024 बिट के पूरे ब्लॉक तक पैडिंग दी जाती है, फिर NIST FIPS 180-4 और RFC 1321 के अनुसार एल्गोरिदम के कम्प्रेशन चरण चलाए जाते हैं।
इसका उपयोग डाउनलोड को प्रकाशित चेकसम से जाँचने, फ़ाइलें मिलाने और अपने कोड का परीक्षण करने में होता है। डिफ़ॉल्ट वाक्य "The quick brown fox jumps over the lazy dog" का SHA-256 डाइजेस्ट d7a8fbb3…37c9e592 है। इनपुट का एक बिट पलटने से डाइजेस्ट के 256 में से 141 बिट बदलते हैं, जो अच्छे हैश में अपेक्षित लगभग आधे बिट के करीब है।
MD5 और SHA-1 में व्यावहारिक कोलिज़न हमले संभव हैं। जहाँ कोई डेटा में जानबूझकर बदलाव कर सकता हो, वहाँ SHA-256 या SHA-512 चुनें।
पाठ का हैश और चेकसम कैसे निकालें
हैश इनपुट के बाइट से निश्चित लंबाई का डाइजेस्ट बनाता है। SHA-256 में 64 हेक्स अंक, MD5 में 32 और CRC-32 में 8 होते हैं। एक जैसे बाइट हमेशा वही डाइजेस्ट देते हैं। इनपुट में छोटा बदलाव भी सामान्यतः बहुत अलग डाइजेस्ट बनाता है। यहाँ पाठ UTF-8 में पढ़ा जाता है; फ़ाइल के बाइट सीधे अपलोड नहीं होते।
जाँच के लिए abc लिखकर SHA-256 चुनें। बिना नई पंक्ति के उसका परिणाम ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad है, जो NIST के उदाहरण से मिलता है। प्रकाशित चेकसम तुलना बॉक्स में पेस्ट कर सकते हैं।
कौन सा एल्गोरिदम चुनें
MD5: 128 बिट, 32 हेक्स अंक; RFC 1321 में परिभाषित।
SHA-1: 160 बिट, 40 हेक्स अंक।
SHA-256: 256 बिट, 64 हेक्स अंक।
SHA-512: 512 बिट, 128 हेक्स अंक।
CRC-32: 32 बिट, 8 हेक्स अंक; अनजानी संचार या फ़ाइल त्रुटियों की जाँच के लिए।
SHA परिवार का विवरण FIPS 180-4 में है। सुरक्षा के लिए MD5 और SHA-1 न चुनें: इनके कोलिज़न हमले ज्ञात हैं। RFC 6151 MD5 की सीमाएँ बताता है; NIST की घोषणा SHA-1 से आगे बढ़ने को कहती है।
वही दिखने वाला पाठ अलग हैश क्यों देता है
डाइजेस्ट दिखावट का नहीं, बाइट का है। echo abc | sha256sum में नई पंक्ति भी शामिल है: 3 के बजाय 4 बाइट। केवल पाठ के लिए printf '%s' abc चलाएँ। यहाँ अंत में लाइन फ़ीड वाला विकल्प चालू करने पर echo जैसा परिणाम मिलेगा।
Windows की CRLF और LF पंक्तियाँ अलग हैं। é का UTF-8 रूप C3 A9 दो बाइट है; Latin-1 का E9 एक बाइट है। पहले से संयुक्त é और e के बाद अलग उच्चारण चिह्न दिखने में समान हो सकते हैं, लेकिन UTF-8 बाइट अलग हैं। इसलिए कॉपी-पेस्ट की जाँच में एन्कोडिंग और Unicode सामान्यीकरण भी देखें।
हेक्स और Base64 एक ही डाइजेस्ट बाइट लिखने के दो तरीके हैं। abc का SHA-256 Base64 में ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0= है। हेक्स पाठ को फिर Base64 करने से अलग परिणाम बनता है। हेक्स में बड़े-छोटे अक्षर समान हैं; Base64 में उनका अंतर मायने रखता है।
एक बिट पलटने की जाँच
यह एवलांच उदाहरण पहले इनपुट बाइट का सबसे निचला बिट पलटता है, फिर बदले डाइजेस्ट बिट गिनता है। हर उदाहरण में ठीक आधे बिट बदलना आवश्यक नहीं है।
उदाहरण
इनपुट बाइट
डाइजेस्ट बिट
बदले बिट
डिफ़ॉल्ट
43
256
141
SHA-256 में abc
3
256
112
जोड़ी गई लाइन फ़ीड
4
256
127
CRC जाँच मान
9
32
15
Unicode UTF-8
14
256
119
डिफ़ॉल्ट The quick brown fox jumps over the lazy dog है। दूसरी और तीसरी पंक्ति abc तथा abc के बाद लाइन फ़ीड हैं। CRC पंक्ति में 123456789 है; Unicode पंक्ति में héllo €😀 के 8 कोड पॉइंट और 14 UTF-8 बाइट हैं।
जाँच मान और परिणाम की सीमा
खाली पाठ का SHA-256 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 और MD5 d41d8cd98f00b204e9800998ecf8427e है। abc का MD5 900150983cd24fb0d6963f7d28e17f72 तथा 123456789 का CRC-32 cbf43926 है। डाउनलोड पर खाली-पाठ का डाइजेस्ट मिले तो पहले फ़ाइल का आकार जाँचें।
मेल खाता चेकसम तभी उपयोगी है जब उसका स्रोत भरोसेमंद हो। हमलावर फ़ाइल और उसके साथ दिया चेकसम दोनों बदल सकता हो तो केवल मेल पर्याप्त नहीं है; हस्ताक्षरित रिलीज़ या अलग भरोसेमंद स्रोत देखें। हैश एन्क्रिप्शन नहीं है: सामान्य पासवर्ड या फ़ोन नंबर के संभावित मानों का हैश बनाकर तुलना की जा सकती है।
यह पृष्ठ अधिकतम 100,000 UTF-8 बाइट लेता है। फ़ाइलों के लिए Linux पर sha256sum, macOS पर shasum -a 256 या PowerShell पर Get-FileHash लें। तुलना के लिए हेक्स, वैकल्पिक 0x और स्पेस, या Base64 स्वीकार है। पाठ पृष्ठ के पते और डिवाइस के इतिहास में जा सकता है; वास्तविक कुंजी, टोकन या पासवर्ड न पेस्ट करें।
जाँच का स्रोत: उदाहरण जाँच: FIPS 180-4 / NIST CSRC का SHA-512 दो-ब्लॉक उदाहरण
सवाल
क्या MD5 का उपयोग अब भी सुरक्षित है?
सुरक्षा के लिए नहीं। MD5 कोलिज़न के व्यावहारिक उदाहरण 2004 में प्रकाशित हुए; 2008 में शोधकर्ताओं ने उनसे भरोसेमंद सर्टिफिकेट अथॉरिटी का जाली प्रमाणपत्र बनाया। RFC 6151 (2011) के अनुसार डिजिटल हस्ताक्षर जैसे उपयोगों में, जहाँ कोलिज़न प्रतिरोध चाहिए, MD5 स्वीकार्य नहीं है। यह डाउनलोड की अनजानी खराबी पकड़ सकता है, लेकिन हमलावर द्वारा बदले जा सकने वाले डेटा के लिए NIST FIPS 180-4 का SHA-256 या SHA-512 चुनें।
SHA-1 और SHA-256 में क्या अंतर है?
SHA-256 का डाइजेस्ट 256 बिट या 64 हेक्स अंक का होता है; SHA-1 का 160 बिट या 40 हेक्स अंक का। SHA-1 के विपरीत SHA-256 पर कोई ज्ञात व्यावहारिक कोलिज़न हमला नहीं है। Google और CWI Amsterdam ने 2017 में पहला SHA-1 कोलिज़न, SHAttered, प्रकाशित किया। NIST ने 31 दिसंबर 2030 तक SHA-1 के सभी उपयोग बंद करने की घोषणा की है। दोनों FIPS 180-4 में वर्णित हैं।
फ़ाइल के चेकसम की जाँच कैसे करें?
डाउनलोड की गई फ़ाइल का हैश निकालकर प्रकाशक के दिए चेकसम से मिलाएँ; अंतर होने पर फ़ाइल के बाइट अलग हैं। Linux पर sha256sum file, macOS पर shasum -a 256 file, और Windows पर certutil -hashfile file SHA256 या PowerShell का Get-FileHash चलाएँ। Get-FileHash डिफ़ॉल्ट रूप से SHA-256 लेता है। यहाँ तुलना बॉक्स पाठ के लिए यही जाँच करता है और अक्षरों के बड़े-छोटे रूप तथा स्पेस को अनदेखा करता है।
echo text | sha256sum से अलग हैश क्यों मिलता है?
echo अंत में लाइन फ़ीड जोड़ता है। इसलिए abc के 3 बाइट के बजाय abc और नई पंक्ति के 4 बाइट का हैश बनता है। एक अतिरिक्त बाइट पूरा डाइजेस्ट बदल देता है: abc का SHA-256 ba7816bf से शुरू होता है, जबकि लाइन फ़ीड के साथ edeaaff3 से। केवल पाठ का हैश निकालने के लिए echo -n या printf '%s' लें, या echo जैसा परिणाम पाने के लिए यहाँ लाइन फ़ीड विकल्प चालू करें।
क्या दो अलग इनपुट का हैश एक जैसा हो सकता है?
हाँ। असीमित इनपुट निश्चित संख्या के डाइजेस्ट में बदलते हैं, पर सुरक्षित हैश में ऐसा जोड़ा ढूँढ़ना व्यावहारिक नहीं होना चाहिए। बर्थडे सीमा के अनुसार n-बिट डाइजेस्ट का कोलिज़न ढूँढ़ने में लगभग 2^(n/2) कोशिशें लगती हैं: MD5 के लिए 2^64 और SHA-256 के लिए 2^128। ज्ञात हमले MD5 और SHA-1 कोलिज़न इससे कहीं जल्दी ढूँढ़ लेते हैं। CRC रैखिक है, इसलिए CRC-32 कोलिज़न सीधे बनाए जा सकते हैं।
इस कैलकुलेटर में स्वतंत्र स्रोतों के उत्तरों वाले 11 हल किए गए उदाहरण शामिल हैं। ये परीक्षण समूह में चलते हैं और आप इन्हें यहाँ भी चला सकते हैं।
यह कैलकुलेटर अपनी वेबसाइट पर लगाएँ
जहाँ कैलकुलेटर दिखाना है, वहाँ इसे पेस्ट करें। इसका उपयोग मुफ़्त है, यहाँ किए गए सुधार इसमें अपने आप पहुँच जाते हैं, और उसके नीचे की श्रेय पंक्ति मूल पेज का लिंक देती है, जिससे आपके पाठक पूरा संस्करण देख सकते हैं।