Pack Camo

HMAC जनरेटर और सत्यापनकर्ता

hex, Base64 या टेक्स्ट key के साथ HMAC-SHA256, SHA-1, SHA-384 और SHA-512 सिग्नेचर।

सब कुछ लोकल तौर पर चलता है — कुछ भी अपलोड नहीं होता।

Secret key

3 बाइट

संदेश

43 बाइट

सिग्नेचर HMAC-SHA-256

  • Hexगणना हो रही है…
  • HEXगणना हो रही है…
  • Base64गणना हो रही है…
  • Base64urlगणना हो रही है…
  • हेडरगणना हो रही है…

HMAC निकालें, या webhook से आए सिग्नेचर की जाँच करें

यह HMAC जनरेटर HMAC-SHA256, HMAC-SHA1, HMAC-SHA384 या HMAC-SHA512 से किसी संदेश को secret key के साथ साइन करता है और सिग्नेचर को lowercase hex, uppercase hex, Base64 और Base64url में एक साथ दिखाता है। key और संदेश दोनों को सादे टेक्स्ट, hex या Base64 में लिखा जा सकता है, इसलिए यह raw बाइनरी secrets और पासवर्ड दोनों के साथ काम करता है। आपको मिला सिग्नेचर पेस्ट करें — GitHub का <code>sha256=…</code>, Stripe का <code>t=…,v1=…</code> हेडर या सादा Base64 — और यह बता देगा कि वह मेल खाता है या नहीं। गणना आपके ब्राउज़र के Web Crypto API से होती है; key और संदेश कभी इस पेज से बाहर नहीं जाते।

HMAC कैसे बनाएँ या सत्यापित करें

  1. 1हैश फ़ंक्शन चुनें: ज़्यादातर API और webhooks SHA-256 का इस्तेमाल करते हैं।
  2. 2secret key टाइप या पेस्ट करें और चुनें कि वह कैसे लिखी है: टेक्स्ट, hex या Base64। सही लंबाई का नया secret बनाने के लिए रैंडम key का इस्तेमाल करें।
  3. 3संदेश पेस्ट करें — webhook के लिए, raw request body ठीक वैसी ही जैसी पहुँची थी, बाइट-दर-बाइट।
  4. 4ज़रूरी एन्कोडिंग में सिग्नेचर कॉपी करें। किसी सिग्नेचर की जाँच के लिए उसे अपेक्षित सिग्नेचर में पेस्ट करें; sha256= जैसा prefix पहचान कर अनदेखा कर दिया जाता है।

HMAC क्या है?

HMAC (hash-based message authentication code, RFC 2104) एक छोटा मान है जो किसी संदेश और secret key से निकाला जाता है। key जानने वाला कोई भी व्यक्ति वही मान निकाल सकता है और इस तरह एक साथ दो बातें जाँच सकता है: कि संदेश रास्ते में बदला नहीं गया, और कि उसे key रखने वाले ने बनाया है। key के बिना हमलावर न तो नए संदेश के लिए वैध HMAC जाली बना सकता है, न संदेश बदलने के बाद मौजूदा HMAC को बदल सकता है।

यह सिर्फ़ key और संदेश को जोड़कर निकाला गया हैश नहीं है। HMAC दो बार हैश करता है, key को एक आंतरिक और एक बाहरी pad में मिलाकर: H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ message))। यही बनावट इसे SHA-256 और SHA-512 के साथ सुरक्षित बनाती है, जो अकेले H(key ‖ message) की तरह इस्तेमाल करने पर length-extension हमलों के प्रति कमज़ोर होते हैं।

Webhook सिग्नेचर सत्यापित करना

ज़्यादातर webhook प्रदाता हर request को body के HMAC से साइन करते हैं और नतीजा एक हेडर में रखते हैं। इसे सत्यापित करने के लिए अपने signing secret से raw body का HMAC निकालें और हेडर के मान से तुलना करें। सबसे आम ग़लती है पहुँचे हुए बाइट्स की जगह दोबारा serialize किए गए JSON ऑब्जेक्ट को हैश करना: keys का अलग क्रम या एक छूटा हुआ space सिग्नेचर को पूरी तरह बदल देता है।

कुछ प्रदाता body से ज़्यादा साइन करते हैं। Stripe timestamp.body साइन करता है — हेडर से t का मान, एक डॉट, फिर payload — और Slack v0:timestamp:body साइन करता है। यहाँ संदेश के रूप में ठीक वही स्ट्रिंग बनाएँ और पूरा हेडर सत्यापन बॉक्स में पेस्ट करें; उसमें से v1= या v0= का मान अपने-आप निकाल लिया जाता है।

GitHub
<code>X-Hub-Signature-256: sha256=&lt;hex&gt;</code>, body का HMAC-SHA256, webhook secret को टेक्स्ट मानकर।
Stripe
<code>Stripe-Signature: t=…,v1=&lt;hex&gt;</code>, <code>t.body</code> का HMAC-SHA256।
Shopify
<code>X-Shopify-Hmac-Sha256: &lt;Base64&gt;</code>, body का HMAC-SHA256।
Slack
<code>X-Slack-Signature: v0=&lt;hex&gt;</code>, <code>v0:timestamp:body</code> का HMAC-SHA256।

टेक्स्ट, hex और Base64 keys

key बाइट्स का एक क्रम है, और वह कैसे लिखी गई है यह मायने रखता है। टेक्स्ट abc123 छह बाइट है; hex abc123 तीन बिल्कुल अलग बाइट हैं। कई सेवाएँ secrets को hex या Base64 स्ट्रिंग के रूप में देती हैं लेकिन चाहती हैं कि आप उसी स्ट्रिंग को टेक्स्ट key की तरह इस्तेमाल करें — GitHub और Stripe दोनों ऐसा करते हैं — जबकि दूसरी, जैसे AWS-शैली की signing chains और Shopify के app proxies, decode किए गए बाइट्स का इस्तेमाल करती हैं। अगर सिग्नेचर मेल नहीं खाता, तो सबसे पहले key की एन्कोडिंग बदलकर देखें।

नई key के लिए कम से कम हैश आउटपुट जितने लंबे रैंडम बाइट्स इस्तेमाल करें: HMAC-SHA256 के लिए 32 बाइट, HMAC-SHA512 के लिए 64। लंबी keys से कोई फ़ायदा नहीं — हैश के block size से बड़ी कोई भी चीज़ पहले हैश करके छोटी कर दी जाती है।

Constant-time तुलना

जब आपका सर्वर सिग्नेचर जाँचे, तो उसकी तुलना constant-time फ़ंक्शन से करें, जैसे Node.js में crypto.timingSafeEqual, Python में hmac.compare_digest या PHP में hash_equals। सामान्य स्ट्रिंग तुलना पहले अलग अक्षर पर रुक जाती है, और उसमें लगने वाला समय यह बता सकता है कि जाली सिग्नेचर का कितना हिस्सा सही था। यह पेज भी उसी constant-time तरीके का इस्तेमाल करता है, इसलिए इसका कोड जाँच के साथ-साथ संदर्भ भी है।

अगर आपको बिना key के किसी फ़ाइल या टेक्स्ट का सामान्य checksum चाहिए, तो हैश जनरेटर इस्तेमाल करें। टोकन साइन करने के लिए JWT सीक्रेट जनरेटर सही आकार की HS256 keys बनाता है।

अक्सर पूछे जाने वाले सवाल

हैश और HMAC में क्या अंतर है?
SHA-256 जैसा हैश सिर्फ़ डेटा पर निर्भर करता है, इसलिए कोई भी उसे दोबारा निकाल सकता है। HMAC एक secret key पर भी निर्भर करता है, इसलिए उसे सिर्फ़ key रखने वाला ही बना या जाँच सकता है। इसी वजह से HMAC सिर्फ़ अखंडता का नहीं, प्रामाणिकता का भी प्रमाण है।
मेरा HMAC API वाले से मेल क्यों नहीं खाता?
लगभग हमेशा इनपुट अलग होता है: संदेश बाइट-दर-बाइट raw body नहीं है (दोबारा serialize किया JSON, अंत में newline, अलग line endings), key को टेक्स्ट की तरह पढ़ा जा रहा है जबकि सेवा का मतलब hex या Base64 बाइट्स से है या इसका उल्टा, या प्रदाता सिर्फ़ body नहीं बल्कि timestamp के साथ body साइन करता है।
मुझे कौन-सा HMAC एल्गोरिद्म इस्तेमाल करना चाहिए?
HMAC-SHA256 मानक विकल्प है और लगभग हर API इसी का इस्तेमाल करता है। HMAC-SHA512 भी उतना ही अच्छा है और 64-bit सर्वरों पर तेज़ है। SHA-1 collisions के बावजूद HMAC-SHA1 एक HMAC के रूप में अब भी सुरक्षित है, लेकिन इसे सिर्फ़ तभी इस्तेमाल करें जब कोई प्रोटोकॉल इसकी माँग करे।
क्या HMAC-SHA1 टूट चुका है?
नहीं। SHA-1 collisions से key के बिना HMAC-SHA1 जाली बनाने का कोई तरीका नहीं मिलता, और HMAC-SHA1 पर कोई व्यावहारिक हमला ज्ञात नहीं है। नए डिज़ाइनों के लिए इसकी सलाह नहीं दी जाती, लेकिन पुराने HMAC-SHA1 सिग्नेचर सत्यापित करना सुरक्षित है।
क्या मैं यहाँ HMAC-MD5 निकाल सकता हूँ?
नहीं। ब्राउज़र का Web Crypto API, जिसका यह पेज इस्तेमाल करता है, MD5 लागू नहीं करता। HMAC-MD5 सिर्फ़ पुराने प्रोटोकॉल में बचा है; किसी भी नए काम के लिए HMAC-SHA256 इस्तेमाल करें।
HMAC key कितनी लंबी होनी चाहिए?
कम से कम हैश आउटपुट जितनी: HMAC-SHA256 के लिए 32 रैंडम बाइट, SHA-384 के लिए 48, SHA-512 के लिए 64। रैंडम key बटन आपके ब्राउज़र के सुरक्षित रैंडम नंबर जनरेटर से ठीक इतनी ही लंबी key बनाता है।
क्या मैं खाली key इस्तेमाल कर सकता हूँ?
HMAC इसकी अनुमति देता है और नतीजा स्पष्ट रूप से परिभाषित है, इसलिए टूल उसे दिखाता है, लेकिन खाली या छोटी key कोई सुरक्षा नहीं देती। कोई भी वही सिग्नेचर निकाल सकता है।
क्या मेरी secret key कहीं भेजी जाती है?
नहीं। HMAC इसी पेज पर आपके ब्राउज़र के Web Crypto API से निकाला जाता है। आप जो भी टाइप करते हैं, वह न अपलोड होता है न सेव।