HMAC को संदेश के साथ कुंजी भी चाहिए
साधारण SHA-256 संदेश के बाइट का हैश बनाता है। HMAC-SHA-256 कुंजी और संदेश से प्रमाणीकरण मान गणना करता है। RFC 2104 की रचना केवल संदेश के आगे कुंजी जोड़कर हैश बनाना नहीं है। बिना कुंजी के हैश का मिलना अकेले प्रेषक को प्रमाणित नहीं करता।
RFC टेस्ट कुंजी को बाइट में दोहराएँ
RFC 4231 का टेस्ट 1 बीस 0x0b बाइट और Hi There संदेश उपयोग करता है। नीचे का कोड Web Crypto HMAC कुंजी आयात करके परिणाम हेक्साडेसिमल में दिखाता है। 0b टेक्स्ट बीस बार दोहराने से 40 बाइट का अलग इनपुट बनता है। यह सार्वजनिक टेस्ट कुंजी है, उत्पादन की गुप्त कुंजी नहीं।
Moyoutil साधारण SHA हैश गणना करता है और HMAC इनपुट नहीं देता। नीचे अलग JavaScript उदाहरण है, संपूर्ण लॉगिन या वेबहुक सत्यापन प्रणाली नहीं। वास्तविक प्रमाणीकरण में गुप्त कुंजी की सुरक्षा और सही सत्यापन प्रक्रिया चाहिए।
const hex = bytes => Array.from(new Uint8Array(bytes),
n => n.toString(16).padStart(2, '0')).join('');
const keyBytes = new Uint8Array(20).fill(0x0b);
const message = new TextEncoder().encode('Hi There');
const key = await crypto.subtle.importKey(
'raw', keyBytes, {name:'HMAC', hash:'SHA-256'},
false, ['sign']);
const mac = await crypto.subtle.sign('HMAC', key, message);
console.log(hex(mac));
// b0344c61d8db38535ca8afceaf0bf12b
// 881dc200c9833da726e9376c2e32cff7अक्सर पूछे जाने वाले प्रश्न
क्या दोनों नामों में SHA-256 होने से परिणाम तुलना कर सकते हैं?
साधारण SHA-256 और HMAC-SHA-256 को न मिलाएँ। HMAC तुलना में समान कुंजी बाइट, संदेश बाइट और एल्गोरिदम चाहिए। हेक्साडेसिमल और Base64 जैसे आउटपुट प्रारूप भी अलग समझें।