इसका इस्तेमाल कैसे करें
- संदेश को संदेश में लिखें। बाइनरी डेटा के लिए संदेश की एन्कोडिंग में हेक्साडेसिमल या Base64 चुनें।
- गुप्त कुंजी को कुंजी में लिखें, और कुंजी की एन्कोडिंग में चुनें कि वह कैसे लिखी गई है।
- HMAC मान की चार पंक्तियाँ पढ़ें। जो मान चाहिए उसे कॉपी करें, या उसे उस मान से मिलाएँ जो आपका सिस्टम देता है।
- अगर मान किसी दूसरे सिस्टम से अलग हों, तो पहले बाइट जाँचें: अलग लाइन-अंत या एन्कोडिंग से अलग HMAC बनता है।
HMAC क्या है
HMAC (RFC 2104) एक संदेश प्रमाणीकरण कोड है: एक छोटा मान जिसे सिर्फ गुप्त कुंजी जानने वाला बना सकता है। यह एक साधारण हैश फ़ंक्शन H से बनता है, जो संदेश और कुंजी पर दो बार लगाया जाता है, इसलिए तालिका की चारों पंक्तियों के लिए वही हैश काम आता है। कुंजी जरूरी होने से मेल खाने वाला HMAC दिखाता है कि संदेश बदला नहीं गया और वह कुंजी रखने वाले से आया है।
HMAC संदेश को छिपाता नहीं। जिसके पास संदेश है वह उसे पढ़ सकता है; HMAC सिर्फ उसकी जाँच करने देता है।
HMAC(K, m) = H((K XOR opad) || H((K XOR ipad) || m))
ipad = बाइट 0x36, B बार दोहराया गया
opad = बाइट 0x5C, B बार दोहराया गया
B = H का ब्लॉक आकार: SHA-1 और SHA-256 के लिए 64 बाइट, SHA-384 और SHA-512 के लिए 128 बाइट
कौन सा हैश और कौन सी कुंजी
HMAC-SHA-256 आम चुनाव है, और कई वेबहुक और API यही इस्तेमाल करते हैं। HMAC-SHA-512 वही बनावट है, पर लंबे परिणाम के साथ। HMAC-SHA-1 पुराने सिस्टम में अब भी दिखता है, और नए डिज़ाइन के लिए यह चुनाव नहीं है।
कुंजी रैंडम होनी चाहिए और हैश के परिणाम जितनी या उससे लंबी। कोई शब्द या छोटा वाक्यांश बनी कुंजी आसानी से अनुमान लगाई जा सकती है, और अनुमान लगी कुंजी से HMAC बेकार हो जाता है।
हेक्साडेसिमल और Base64
दोनों रूप एक ही बाइट दिखाते हैं। हेक्साडेसिमल हर बाइट को दो अंकों में लिखता है, इसलिए SHA-256 के 64 अंक होते हैं। Base64 तीन बाइट को चार अक्षरों में लिखता है, इसलिए SHA-256 के 44 अक्षर होते हैं, जिनमें आखिरी अक्षर पैडिंग के लिए = है (RFC 4648)।
- HMAC-SHA-1: 40 हेक्साडेसिमल अंक, 28 Base64 अक्षर
- HMAC-SHA-256: 64 हेक्साडेसिमल अंक, 44 Base64 अक्षर
- HMAC-SHA-384: 96 हेक्साडेसिमल अंक, 64 Base64 अक्षर
- HMAC-SHA-512: 128 हेक्साडेसिमल अंक, 88 Base64 अक्षर
उदाहरण: RFC 4231, परीक्षण 2
कुंजी Jefe और संदेश what do ya want for nothing? RFC 4231 के SHA-256, SHA-384 और SHA-512 के लिए परीक्षण 2 हैं, और SHA-1 के लिए RFC 2202 के। नीचे की तालिका पेज उनके लिए जो दिखाता है वही है, और उसका HMAC-SHA-256 मान वही है जो RFC छापता है: 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843।
| एल्गोरिदम | हेक्साडेसिमल | Base64 |
|---|---|---|
| HMAC-SHA-1 | effcdf6ae5eb2fa2d27416d5f184df9c259a7c79 | 7/zfauXrL6LSdBbV8YTfnCWafHk= |
| HMAC-SHA-256 | 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843 | W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTsOEM= |
| HMAC-SHA-384 | af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649 | r0XS43ZIQDFhf3jStYprG5x+9GT1oBtH5C7Dc2MiRF6OIkDKXmnix4syOez6shZJ |
| HMAC-SHA-512 | 164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737 | Fkt6e/z4GeLjlfvnO1bgo4e9ZCIugx/WECcM1+olBVSXWL91wFqZSm0DT2X48Ob9yuqxo01Ka0tjbgcKOLznNw== |
अक्सर पूछे जाने वाले सवाल
क्या HMAC संदेश को एन्क्रिप्ट करने जैसा ही है?
नहीं। HMAC संदेश को छिपाता नहीं, इसलिए उसे कोई भी पढ़ सकता है। वह सिर्फ यह दिखाता है कि संदेश बदला नहीं गया और भेजने वाले को कुंजी पता है। गोपनीयता के लिए एन्क्रिप्शन चाहिए।
हैश और HMAC में क्या फर्क है?
हैश सिर्फ संदेश पर निर्भर करता है, इसलिए उसे कोई भी निकाल सकता है। HMAC को गुप्त कुंजी भी चाहिए, इसलिए उसे सिर्फ कुंजी वाला व्यक्ति बना या जाँच सकता है। सादे डाइजेस्ट के लिए हैश जनरेटर लें।
मेरा HMAC मेरी लाइब्रेरी के HMAC से अलग क्यों है?
कुंजी या संदेश के बाइट अलग हैं। टेक्स्ट के रूप में लिखी कुंजी उसके UTF-8 बाइट होती है, और वही अक्षर हेक्साडेसिमल में लिखे जाएँ तो वे अलग बाइट हैं। संदेश के अंत में एक लाइन-ब्रेक भी HMAC बदल देता है।
कौन सी कुंजी की लंबाई लेनी चाहिए?
हैश के परिणाम जितनी या उससे लंबी रैंडम कुंजी: HMAC-SHA-256 के लिए 32 बाइट। RFC 2104 छोटी कुंजी की सख्त मनाही करता है, और शब्दों या छोटे वाक्यांश से बनी कुंजी आसानी से अनुमान लगाई जा सकती है।
क्या इस पेज से वेबहुक का हस्ताक्षर जाँचा जा सकता है?
हाँ, अगर वही बाइट डालें जिन पर हस्ताक्षर हुआ था। वेबहुक के हस्ताक्षर आम तौर पर अनुरोध के मुख्य भाग (body) पर निकाले जाते हैं, इसलिए मुख्य भाग बिना बदले चिपकाएँ: दोबारा फ़ॉर्मेट किया गया JSON अलग HMAC देता है।
क्या मेरी कुंजी या संदेश कहीं भेजा जाता है?
नहीं। HMAC आपके ब्राउज़र में ब्राउज़र के अपने SubtleCrypto से निकाला जाता है। कुंजी और संदेश न अपलोड होते हैं, न सहेजे जाते हैं।
स्रोत
- RFC 2104: HMAC: Keyed-Hashing for Message Authentication (अंग्रेजी में)
- RFC 4231: Identifiers and Test Vectors for HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384 and HMAC-SHA-512 (अंग्रेजी में)
- RFC 2202: Test Cases for HMAC-MD5 and HMAC-SHA-1 (अंग्रेजी में)
- RFC 4648: The Base16, Base32, and Base64 Data Encodings (अंग्रेजी में)
- NIST FIPS 180-4: Secure Hash Standard, SHA-1 and the SHA-2 family (अंग्रेजी में)
आँकड़े और टेक्स्ट आखिरी बार मंगलवार, 10 नवंबर 2026 को जाँचे गए।