HMAC Generator

SHA-256, SHA-384 या SHA-512 के साथ HMAC हस्ताक्षर जेनरेट करें

एल्गोरिथम

संदेश

स्थानीय रूप से चलता है · सीक्रेट पेस्ट करना सुरक्षित है

गुप्त कुंजी

स्थानीय रूप से चलता है · सीक्रेट पेस्ट करना सुरक्षित है

HMAC हस्ताक्षर

HMAC हस्ताक्षर यहाँ दिखाई देगा…

HMAC क्या है?

HMAC (Hash-based Message Authentication Code) एक क्रिप्टोग्राफ़िक संरचना है जो RFC 2104 में परिभाषित है। यह एक हैश फ़ंक्शन को गुप्त कुंजी के साथ संयुक्त करके एक निश्चित-आकार का प्रमाणीकरण टैग उत्पन्न करती है। साधारण हैश के विपरीत, जिसकी गणना कोई भी कर सकता है, HMAC केवल वे पक्ष उत्पन्न और सत्यापित कर सकते हैं जो गुप्त कुंजी साझा करते हैं। HMAC, संदेश की अखंडता और प्रामाणिकता दोनों सत्यापित करने का मानक तंत्र है — यह पुष्टि करता है कि डेटा में कोई परिवर्तन नहीं हुआ और वह किसी विश्वसनीय प्रेषक द्वारा उत्पन्न किया गया था।

HMAC एल्गोरिथम किसी भी पुनरावृत्त हैश फ़ंक्शन के साथ कार्य करता है: SHA-256, SHA-384, SHA-512 और यहाँ तक कि SHA-1 या MD5 जैसे पुराने फ़ंक्शन भी। परिणामी संरचना को उसके अंतर्निहित हैश के नाम से जाना जाता है — HMAC-SHA256, HMAC-SHA384, या HMAC-SHA512। चूँकि HMAC का सुरक्षा प्रमाण हैश फ़ंक्शन की टकराव-प्रतिरोधकता और कुछ छद्म-यादृच्छिक गुणों पर निर्भर करता है, इसलिए SHA-2 परिवार के एल्गोरिदम नई प्रणालियों के लिए अनुशंसित विकल्प हैं। HMAC-SHA256 सर्वाधिक व्यापक रूप से उपयोग किया जाने वाला प्रकार है — AWS Signature V4, Stripe webhooks, GitHub webhook secrets, Slack request signing और JSON Web Tokens (HS256) में इसका उपयोग होता है।

HMAC की अभिकल्पना एक महत्वपूर्ण गुण प्रदान करती है जो साधारण हैशिंग में अनुपस्थित है: लंबाई-विस्तार आक्रमणों के प्रति प्रतिरोध। अकेले SHA-256 के साथ, कोई आक्रमणकर्ता जो H(संदेश) जानता है, मूल संदेश जाने बिना H(संदेश || आक्रमणकर्ता_डेटा) की गणना कर सकता है। HMAC की द्विगुण-हैशिंग संरचना (आंतरिक हैश और बाहरी हैश, भिन्न गद्देदार कुंजियों के साथ) इस आक्रमण को पूर्णतः रोकती है। इसीलिए API हस्ताक्षर योजनाएँ संदेश में गुप्त कुंजी जोड़कर हैश करने के बजाय HMAC का उपयोग करती हैं।

ऑनलाइन HMAC जनरेटर क्यों उपयोग करें?

HMAC हस्ताक्षर की गणना सामान्यतः कोड लिखने या CLI उपकरणों के उपयोग की आवश्यकता होती है। यह ब्राउज़र-आधारित HMAC जनरेटर बिना कोई सॉफ़्टवेयर स्थापित किए या टर्मिनल पर जाए तत्काल HMAC-SHA256, HMAC-SHA384 और HMAC-SHA512 हस्ताक्षर उत्पन्न करने देता है।

तत्काल HMAC गणना
अपना संदेश और गुप्त कुंजी दर्ज करें, हैश एल्गोरिथम चुनें और तुरंत HMAC हस्ताक्षर प्राप्त करें। Web Crypto API आपके ब्राउज़र में मूल रूप से गणना संभालता है।
🔒
गोपनीयता-प्रथम प्रसंस्करण
आपका संदेश और गुप्त कुंजी आपके डिवाइस से बाहर नहीं जाते। सभी HMAC गणना Web Crypto API के माध्यम से स्थानीय रूप से चलती है — कोई सर्वर अनुरोध नहीं, कोई लॉगिंग नहीं, कोई डेटा संग्रह नहीं।
📋
अनेक एल्गोरिदम का समर्थन
एक क्लिक से HMAC-SHA256, HMAC-SHA384 और HMAC-SHA512 के बीच स्विच करें। यह सत्यापित करने के लिए कि आपका बैकएंड कार्यान्वयन सही है, एल्गोरिदम के पार आउटपुट की तुलना करें।
🔍
कोई खाता या स्थापना आवश्यक नहीं
किसी भी आधुनिक ब्राउज़र में काम करता है — Chrome, Firefox, Safari, Edge। कोई पंजीकरण नहीं, कोई एक्सटेंशन नहीं, कोई CLI सेटअप नहीं। पृष्ठ खोलें और HMAC हस्ताक्षर उत्पन्न करना प्रारंभ करें।

HMAC जनरेटर के उपयोग के मामले

फ्रंटएंड डेवलपर — Webhook हस्ताक्षर सत्यापन
Stripe, GitHub और Shopify, HMAC-SHA256 के साथ webhook पेलोड पर हस्ताक्षर करते हैं। विकास के दौरान किसी पेलोड और गुप्त कुंजी से अपेक्षित हस्ताक्षर की गणना करने और उसे HTTP हेडर में हस्ताक्षर से तुलना करने के लिए इस टूल का उपयोग करें।
बैकएंड इंजीनियर — API अनुरोध हस्ताक्षर
AWS Signature V4 के हस्ताक्षर प्रक्रिया के अनेक चरणों में HMAC-SHA256 की आवश्यकता होती है। हस्ताक्षर बेमेल को डीबग करने और मध्यवर्ती गणना चरणों को सत्यापित करने के लिए विकास के दौरान संदर्भ HMAC मान उत्पन्न करें।
DevOps — गुप्त कुंजी बदलाव सत्यापन
Webhook गुप्त कुंजियाँ या API हस्ताक्षर कुंजियाँ बदलते समय, पुरानी और नई दोनों कुंजियों के साथ HMAC हस्ताक्षर की गणना करें ताकि पुरानी कुंजी समाप्त होने से पहले यह पुष्टि हो सके कि आपका अनुप्रयोग संक्रमण को सही ढंग से संभालता है।
QA इंजीनियर — हस्ताक्षर परीक्षण सदिश
अपने प्रमाणीकरण मिडलवेयर के लिए प्रतिगमन परीक्षण बनाने हेतु ज्ञात इनपुट और कुंजियों के साथ HMAC परीक्षण सदिश उत्पन्न करें। सत्यापित करें कि आपका कार्यान्वयन रिक्त संदेशों, Unicode इनपुट और लंबी कुंजियों को सही ढंग से संभालता है।
डेटा इंजीनियर — पाइपलाइन संदेश प्रमाणीकरण
सेवाओं के बीच पारगमन में संदेशों से छेड़छाड़ न हुई हो, यह सत्यापित करने के लिए घटना-चालित पाइपलाइनों (Kafka, SQS) में संदेशों के साथ HMAC हस्ताक्षर संलग्न करें।
छात्र — क्रिप्टोग्राफ़ी पाठ्यक्रम
HMAC के साथ प्रयोग करें यह समझने के लिए कि संदेश या कुंजी में एक भी वर्ण बदलने से पूर्णतः भिन्न हस्ताक्षर कैसे उत्पन्न होता है। गुप्त कुंजी के अंतर को देखने के लिए HMAC आउटपुट की तुलना साधारण SHA-256 आउटपुट से करें।

HMAC बनाम साधारण हैश बनाम एन्क्रिप्शन

HMAC, साधारण हैशिंग और एन्क्रिप्शन भिन्न प्रयोजनों की पूर्ति करते हैं। HMAC संदेश प्रमाणीकरण प्रदान करता है — यह प्रमाण कि संदेश गुप्त कुंजी वाले किसी व्यक्ति द्वारा बनाया गया और उसमें कोई बदलाव नहीं हुआ। साधारण हैश अखंडता प्रदान करता है किंतु प्रमाणीकरण नहीं। एन्क्रिप्शन गोपनीयता प्रदान करता है। नीचे की तालिका इन अंतरों को स्पष्ट करती है।

गुणHMACPlain HashEncryption
PurposeMessage authentication + integrityData integrity only (no key)Confidentiality + integrity
Requires secret keyYesNoYes
Verifiable byParties who share the secretAnyoneRecipient with key
ReversibleNo — digest onlyNo — digest onlyYes — decryption recovers data
Output sizeDepends on hash (e.g. 256 bits)Depends on hashVariable (ciphertext)
StandardRFC 2104FIPS 180-4NIST SP 800-38A (AES)
Use case exampleWebhook signature verificationFile checksum verificationEncrypting data at rest

HMAC एल्गोरिथम तुलना

HMAC किसी भी हैश फ़ंक्शन का उपयोग कर सकता है, किंतु अंतर्निहित एल्गोरिथम का चुनाव आउटपुट आकार, सुरक्षा स्तर और ब्राउज़र अनुकूलता निर्धारित करता है। HMAC-SHA256 नई प्रणालियों के लिए सर्वाधिक सामान्य विकल्प है। नीचे की तालिका उन प्रकारों की तुलना करती है जिनका आप सामना करने की संभावना रखते हैं।

एल्गोरिथमडाइजेस्ट आकारहेक्स लंबाईवेब क्रिप्टोसर्वोत्तम उपयोग
HMAC-SHA256256 bits64 hex charsYesAPI signing, webhooks, JWT (HS256)
HMAC-SHA384384 bits96 hex charsYesTLS 1.3 PRF, CNSA compliance
HMAC-SHA512512 bits128 hex charsYesHigh-security signatures, HKDF
HMAC-SHA1160 bits40 hex charsYesLegacy OAuth 1.0, TOTP (RFC 6238)
HMAC-MD5128 bits32 hex charsNoLegacy only — not recommended

HMAC आंतरिक रूप से कैसे काम करता है

HMAC, अंतर्निहित हैश फ़ंक्शन को दो भिन्न कुंजी-व्युत्पन्न पैड के साथ दो बार लागू करता है। यह संरचना RFC 2104 में परिभाषित है और मानक क्रिप्टोग्राफ़िक अनुमानों के अंतर्गत PRF (छद्म-यादृच्छिक फ़ंक्शन) सिद्ध है। कुंजी को पहले हैश फ़ंक्शन के ब्लॉक आकार से मेल खाने के लिए गद्देदार किया या हैश किया जाता है (SHA-256 के लिए 64 बाइट, SHA-512 के लिए 128 बाइट)।

HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))
where K' = key padded to block size, ipad = 0x36, opad = 0x5C

एल्गोरिथम गद्देदार कुंजी को एक आंतरिक पैड स्थिरांक (ipad, 0x36 दोहराया) के साथ XOR करता है, उसे संदेश के साथ जोड़ता है और परिणाम को हैश करता है। फिर वह गद्देदार कुंजी को एक बाहरी पैड स्थिरांक (opad, 0x5C दोहराया) के साथ XOR करता है, उसे आंतरिक हैश आउटपुट के साथ जोड़ता है और पुनः हैश करता है। यह द्विगुण-हैशिंग संरचना ही लंबाई-विस्तार आक्रमणों को रोकती है और सुनिश्चित करती है कि HMAC आउटपुट गुप्त कुंजी के ज्ञान के बिना नहीं उत्पन्न किया जा सकता।

HMAC कोड उदाहरण

HMAC प्रत्येक प्रमुख भाषा और रनटाइम में मूल रूप से समर्थित है। Web Crypto API किसी भी लाइब्रेरी के बिना ब्राउज़र में HMAC-SHA256, HMAC-SHA384 और HMAC-SHA512 प्रदान करता है। नीचे दिए गए उदाहरण webhook सत्यापन और स्थिर-समय तुलना सहित वास्तविक उपयोग प्रतिरूप दर्शाते हैं।

JavaScript (Web Crypto API)
async function hmacSHA256(message, secret) {
  const enc = new TextEncoder()
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' },
    false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(message))
  return Array.from(new Uint8Array(sig))
    .map(b => b.toString(16).padStart(2, '0')).join('')
}

await hmacSHA256('hello world', 'my-secret-key')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHmac('sha256', 'my-secret-key')
  .update('hello world').digest('hex')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
Python
import hmac
import hashlib

# HMAC-SHA256
sig = hmac.new(
    b'my-secret-key',
    b'hello world',
    hashlib.sha256
).hexdigest()
print(sig)
# → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

# Verify a webhook signature (constant-time comparison)
expected = "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
received = hmac.new(b'my-secret-key', b'hello world', hashlib.sha256).hexdigest()
if hmac.compare_digest(expected, received):
    print("Signature valid")

# HMAC-SHA512
hmac.new(b'key', b'data', hashlib.sha512).hexdigest()
Go
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "fmt"
)

func main() {
    mac := hmac.New(sha256.New, []byte("my-secret-key"))
    mac.Write([]byte("hello world"))
    sig := mac.Sum(nil)
    fmt.Printf("%x\n", sig)
    // → 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

    // Verify: use hmac.Equal for constant-time comparison
    expected := mac.Sum(nil)
    fmt.Println(hmac.Equal(sig, expected)) // true
}
CLI (OpenSSL)
# HMAC-SHA256
echo -n "hello world" | openssl dgst -sha256 -hmac "my-secret-key"
# → SHA2-256(stdin)= 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

# HMAC-SHA512
echo -n "hello world" | openssl dgst -sha512 -hmac "my-secret-key"

# Verify a file signature
openssl dgst -sha256 -hmac "my-secret-key" release.tar.gz

# HMAC with hex key (e.g. from a webhook secret)
echo -n "payload" | openssl dgst -sha256 -hmac "$(echo -n '736563726574' | xxd -r -p)"

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

HMAC और साधारण हैश में क्या अंतर है?
साधारण हैश (SHA-256, MD5) केवल संदेश को इनपुट के रूप में लेता है और एक डाइजेस्ट उत्पन्न करता है जिसकी गणना कोई भी कर सकता है। HMAC संदेश और गुप्त कुंजी दोनों लेता है और एक हस्ताक्षर उत्पन्न करता है जिसे केवल कुंजी वाला व्यक्ति उत्पन्न या सत्यापित कर सकता है। इसका अर्थ है कि HMAC अखंडता जाँच के अतिरिक्त प्रमाणीकरण (प्रेषक पहचान का प्रमाण) भी प्रदान करता है। साधारण हैश केवल यह सिद्ध करता है कि डेटा में परिवर्तन नहीं हुआ, यह नहीं कि इसे किसने उत्पन्न किया।
क्या HMAC-SHA256 सुरक्षित है?
हाँ। HMAC-SHA256 को 2026 तक सुरक्षित माना जाता है। इसकी सुरक्षा SHA-256 के छद्म-यादृच्छिक गुणों और HMAC संरचना (RFC 2104) पर निर्भर करती है। HMAC-SHA256 के विरुद्ध कोई व्यावहारिक आक्रमण प्रदर्शित नहीं किया गया है। यहाँ तक कि HMAC-MD5 और HMAC-SHA1 भी व्यवहार में सुरक्षित बने रहते हैं क्योंकि HMAC की सुरक्षा के लिए अंतर्निहित हैश की पूर्ण टकराव-प्रतिरोधकता आवश्यक नहीं है, हालाँकि नई प्रणालियों के लिए SHA-2 प्रकारों की अनुशंसा की जाती है।
Webhook पेलोड एन्क्रिप्ट करने के बजाय HMAC क्यों उपयोग करते हैं?
Webhook पेलोड में सामान्यतः वह डेटा होता है जिसकी प्राप्तकर्ता को पहले से अपेक्षा होती है — ऑर्डर विवरण, घटना सूचनाएँ, स्थिति अद्यतन। लक्ष्य डेटा छिपाना (गोपनीयता) नहीं बल्कि यह सिद्ध करना है कि वह वैध प्रेषक से आया और पारगमन में संशोधित नहीं हुआ (प्रामाणिकता और अखंडता)। HMAC इसे न्यूनतम ओवरहेड के साथ प्राप्त करता है: प्रेषक साझा गुप्त कुंजी के साथ पेलोड का HMAC की गणना करता है और उसे HTTP हेडर में शामिल करता है। प्राप्तकर्ता HMAC पुनः गणना करके तुलना करता है। एन्क्रिप्शन अनावश्यक जटिलता और कुंजी प्रबंधन का बोझ जोड़ेगा।
HMAC हस्ताक्षरों की तुलना सुरक्षित तरीके से कैसे करें?
सदैव स्थिर-समय तुलना फ़ंक्शन का उपयोग करें। Python में `hmac.compare_digest()` उपयोग करें। Node.js में `crypto.timingSafeEqual()` उपयोग करें। Go में `hmac.Equal()` उपयोग करें। मानक स्ट्रिंग समानता संक्रियाएँ (== या ===) समय की जानकारी लीक कर सकती हैं: कोई आक्रमणकर्ता यह मापकर कि तुलना में कितना समय लगता है, यह निर्धारित कर सकता है कि उनके जाली हस्ताक्षर के कितने बाइट सही से मेल खाते हैं, फिर शेष बाइट एक-एक करके खोज सकता है।
क्या HMAC को उलटकर गुप्त कुंजी प्राप्त की जा सकती है?
नहीं। HMAC एकतरफा हैश फ़ंक्शन पर आधारित है, इसलिए HMAC आउटपुट से कुंजी निकालने का कोई गणितीय शॉर्टकट नहीं है। किसी आक्रमणकर्ता को कुंजी स्थान पर क्रूर-बल खोज करनी होगी, जो 128 बिट या अधिक की कुंजियों के लिए अव्यावहारिक है। हालाँकि, कमज़ोर या छोटी कुंजियाँ (जैसे सरल पासवर्ड) शब्दकोश आक्रमणों के प्रति संवेदनशील हो सकती हैं, इसलिए HMAC-SHA256 के लिए सदैव कम से कम 256 बिट की क्रिप्टोग्राफ़िक दृष्टि से यादृच्छिक कुंजियाँ उपयोग करें।
यदि HMAC कुंजी हैश ब्लॉक आकार से बड़ी हो तो क्या होता है?
यदि गुप्त कुंजी हैश फ़ंक्शन के ब्लॉक आकार (SHA-256 के लिए 64 बाइट, SHA-512 के लिए 128 बाइट) से बड़ी हो, तो HMAC एल्गोरिथम पहले कुंजी को अंतर्निहित हैश फ़ंक्शन से हैश करके उसे हैश आउटपुट लंबाई तक घटाता है, फिर उस हैश को प्रभावी कुंजी के रूप में उपयोग करता है। इसका अर्थ है कि अत्यंत लंबी कुंजियाँ हैश आउटपुट आकार से परे अतिरिक्त सुरक्षा प्रदान नहीं करतीं। HMAC-SHA256 के लिए, 64 बाइट से बड़ी कुंजियाँ हैश होकर 32 बाइट की हो जाती हैं और 64-बाइट कुंजी की तुलना में कोई सुरक्षा सुधार नहीं देतीं।
HMAC-SHA256 के बजाय HMAC-SHA512 कब उपयोग करें?
HMAC-SHA512 का उपयोग करें जब प्रोटोकॉल इसे अनिवार्य करे (कुछ कुंजी व्युत्पत्ति फ़ंक्शन जैसे HKDF-SHA512, Ed25519 कुंजी उत्पत्ति), जब आपको गहन सुरक्षा के लिए व्यापक हस्ताक्षर की आवश्यकता हो, या जब 64-बिट हार्डवेयर पर चल रहे हों जहाँ SHA-512 वास्तव में SHA-256 से तेज़ होता है। अधिकांश वेब अनुप्रयोगों, API हस्ताक्षर और webhook सत्यापन के लिए, HMAC-SHA256 पर्याप्त सुरक्षा प्रदान करता है और विभिन्न पारिस्थितिक तंत्रों में अधिक सामान्य विकल्प है।