مولّد HMAC

تعمل في المتصفح الأمان

احسب رموز مصادقة الرسائل المعتمدة على التجزئة بمفتاح سري، كما تستخدمها Stripe وGitHub وShopify ومعظم مزوّدي webhook. تعمل الأداة محلياً؛ ولا تُنقل الأسرار أبداً.

الخصوصية: تعمل هذه الأداة بالكامل في متصفحك. لا تغادر بياناتك جهازك أبداً.
جارٍ تحميل الأداة…

ما هو HMAC؟

HMAC (رمز مصادقة الرسالة المعتمد على التجزئة) يجمع مفتاحاً سرياً مع دالة تجزئة مثل SHA-256 لإنتاج علامة تثبت أن الرسالة أنشأها من يملك المفتاح ولم تُعدَّل بعدها. هو ما يوقّع رموز JWT من نوع HS256 ومعظم حمولات webhook؛ والتحقق منه يعني إعادة حسابه بالمفتاح نفسه والمقارنة بزمن ثابت.

يوقّع المزوّد البايتات الخام بالضبط بسرّ مشترك؛ والتحقق من التسليم يعني إعادة حساب HMAC على البايتات نفسها ومقارنته بالتوقيع المستلَم.
  1. المزوّد يوقّع

    1. 1HMAC للنص الخام بالسرّ المشتركعادةً HMAC-SHA256؛ وتوقّع Stripe timestamp.rawBody
    2. 2يرسل النص وترويسة التوقيعX-Hub-Signature-256: sha256=<hex>
  2. أنت تتحقق من التسليم

    1. 3إعادة الحساب على البايتات الخام بالضبطالنص الخام، والسرّ بترميز المفتاح الصحيح، وقيمة t في حقل الطابع الزمني في حالة Stripeهذه الأداة
    2. 4المقارنة مع التوقيع المستلَميُلصق التوقيع مع البادئة sha256= أو v1= أو بدونها، والنتيجة: يتطابق أو لا يتطابقهذه الأداة

      فرع: نص أُعيدت سلسلته، أو ترميز مفتاح خاطئ، أو غياب بادئة الطابع الزمني، أو سطر جديد في النهايةفشل

خارج التسلسل
  • في بيئة الإنتاج: خادمكيكرّر الخطوتين 3 و4 مع كل تسليم ويقارن بزمن ثابت

كيفية استخدام مولّد HMAC

  1. الصق نص الطلب الخام أو الرسالة بالضبط.
  2. أدخل السرّ واختر ترميزه (نص أو سداسي عشري أو Base64).
  3. اختر الخوارزمية التي يستخدمها مزوّدك (عادةً HMAC-SHA256).
  4. أضف اختيارياً الطابع الزمني من ترويسة المزوّد والصق التوقيع المستلَم للتحقق منه.
  5. انسخ التوقيع بصيغة سداسية عشرية أو Base64.

مزايا مولّد HMAC

  • HMAC-SHA256 وSHA-1 وSHA-384 وSHA-512 باستخدام WebCrypto
  • المفتاح كنص UTF-8 أو بايتات سداسية عشرية أو Base64
  • مدخل توقيع اختياري بصيغة «timestamp.payload» على طريقة Stripe
  • التحقق من توقيع مستلَم (يقبل البادئتين sha256= وv1=، بصيغة سداسية عشرية أو Base64)
  • صيغ ترويسات جاهزة لـ webhook الخاصة بـ GitHub وShopify وStripe
  • لا تغادر الأسرار المتصفح أبداً

مثال على مولّد HMAC

HMAC-SHA256 مع متجه الاختبار الكلاسيكي

الإدخال:

Message: The quick brown fox jumps over the lazy dog
Key: key

النتيجة:

f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8

الأسئلة الشائعة حول مولّد HMAC

كيف أتحقق من توقيع webhook من Stripe؟

توقّع Stripe «timestamp.rawBody» باستخدام HMAC-SHA256 بسرّ نقطة النهاية لديك. الصق نص الطلب الخام، وأدخل السرّ، وضع قيمة t من ترويسة Stripe-Signature في حقل الطابع الزمني، وقارن مع قيمة v1.

كيف أتحقق من webhook من GitHub؟

يرسل GitHub الترويسة X-Hub-Signature-256: sha256=<hex>. احسب HMAC-SHA256 للنص الخام باستخدام سرّ webhook وقارن الناتج السداسي العشري؛ وتزيل الأداة البادئة «sha256=» تلقائياً.

لماذا لا يتطابق توقيعي؟

غالباً لأن النص أُعيدت سلسلته (تغيّرت المسافات أو ترتيب المفاتيح)، أو لأن المفتاح كان بصيغة Base64/سداسية عشرية لكنه عومل كنص، أو لغياب بادئة الطابع الزمني، أو لإضافة سطر جديد في النهاية. وقّع البايتات الخام بالضبط دائماً.

هل ينبغي أن يكون المفتاح سداسياً عشرياً أم Base64 أم نصاً؟

بحسب ما يقدّمه لك المزوّد. أسرار Shopify وGitHub نصوص عادية؛ وبعض واجهات API توفّر مفاتيح Base64. اختر «ترميز المفتاح» المطابق حتى تكون البايتات صحيحة.

ما HMAC بالضبط؟

يجمع HMAC (RFC 2104) بين مفتاح سري ودالة تجزئة بحيث لا يستطيع إنشاء الوسم أو التحقق منه إلا الأطراف التي تملك المفتاح. وخلافاً للتجزئة البسيطة للمفتاح+الرسالة، فهو غير معرّض لهجمات تمديد الطول.

ملاحظات تقنية

يحسب HMAC (RFC 2104) القيمة H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ message)). تُجزَّأ المفاتيح الأطول من حجم كتلة التجزئة أولاً؛ وتُحشى المفاتيح الأقصر بالأصفار. تستورد الأداة المفتاح عبر crypto.subtle.importKey وتوقّع عبر crypto.subtle.sign، لذا تطابق النتيجة مكتبات جانب الخادم بايتاً ببايت عند توقيع البايتات الخام نفسها.

المراجع