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 बनाम साधारण हैश बनाम एन्क्रिप्शन
HMAC, साधारण हैशिंग और एन्क्रिप्शन भिन्न प्रयोजनों की पूर्ति करते हैं। HMAC संदेश प्रमाणीकरण प्रदान करता है — यह प्रमाण कि संदेश गुप्त कुंजी वाले किसी व्यक्ति द्वारा बनाया गया और उसमें कोई बदलाव नहीं हुआ। साधारण हैश अखंडता प्रदान करता है किंतु प्रमाणीकरण नहीं। एन्क्रिप्शन गोपनीयता प्रदान करता है। नीचे की तालिका इन अंतरों को स्पष्ट करती है।
| गुण | HMAC | Plain Hash | Encryption |
|---|---|---|---|
| Purpose | Message authentication + integrity | Data integrity only (no key) | Confidentiality + integrity |
| Requires secret key | Yes | No | Yes |
| Verifiable by | Parties who share the secret | Anyone | Recipient with key |
| Reversible | No — digest only | No — digest only | Yes — decryption recovers data |
| Output size | Depends on hash (e.g. 256 bits) | Depends on hash | Variable (ciphertext) |
| Standard | RFC 2104 | FIPS 180-4 | NIST SP 800-38A (AES) |
| Use case example | Webhook signature verification | File checksum verification | Encrypting data at rest |
HMAC एल्गोरिथम तुलना
HMAC किसी भी हैश फ़ंक्शन का उपयोग कर सकता है, किंतु अंतर्निहित एल्गोरिथम का चुनाव आउटपुट आकार, सुरक्षा स्तर और ब्राउज़र अनुकूलता निर्धारित करता है। HMAC-SHA256 नई प्रणालियों के लिए सर्वाधिक सामान्य विकल्प है। नीचे की तालिका उन प्रकारों की तुलना करती है जिनका आप सामना करने की संभावना रखते हैं।
| एल्गोरिथम | डाइजेस्ट आकार | हेक्स लंबाई | वेब क्रिप्टो | सर्वोत्तम उपयोग |
|---|---|---|---|---|
| HMAC-SHA256 | 256 bits | 64 hex chars | Yes | API signing, webhooks, JWT (HS256) |
| HMAC-SHA384 | 384 bits | 96 hex chars | Yes | TLS 1.3 PRF, CNSA compliance |
| HMAC-SHA512 | 512 bits | 128 hex chars | Yes | High-security signatures, HKDF |
| HMAC-SHA1 | 160 bits | 40 hex chars | Yes | Legacy OAuth 1.0, TOTP (RFC 6238) |
| HMAC-MD5 | 128 bits | 32 hex chars | No | Legacy only — not recommended |
HMAC आंतरिक रूप से कैसे काम करता है
HMAC, अंतर्निहित हैश फ़ंक्शन को दो भिन्न कुंजी-व्युत्पन्न पैड के साथ दो बार लागू करता है। यह संरचना RFC 2104 में परिभाषित है और मानक क्रिप्टोग्राफ़िक अनुमानों के अंतर्गत PRF (छद्म-यादृच्छिक फ़ंक्शन) सिद्ध है। कुंजी को पहले हैश फ़ंक्शन के ब्लॉक आकार से मेल खाने के लिए गद्देदार किया या हैश किया जाता है (SHA-256 के लिए 64 बाइट, SHA-512 के लिए 128 बाइट)।
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 सत्यापन और स्थिर-समय तुलना सहित वास्तविक उपयोग प्रतिरूप दर्शाते हैं।
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"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()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
}# 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)"