حساب HMAC والتحقق من التوقيع
توقيع HMAC بمفتاح سري، ومقارنته بالترويسة التي وصلت.
الصق قيمة ترويسة التوقيع لتعرف إن كانت الرسالة أصلية. البادئة sha256= تُتجاهل.
عن الأداة
HMAC بصمة بمفتاح: تدخل الرسالة والمفتاح السري معًا فتخرج قيمة لا يستطيع إنتاجها إلا من يملك المفتاح. لذلك تثبت أمرين معًا: أن الرسالة لم تتغير، وأن مرسلها يعرف السر.
هذه هي الطريقة التي توقّع بها الخدمات ما ترسله إلى خوادمك: توقيع Stripe في ترويسة Stripe-Signature، وتوقيع Shopify بصيغة Base64 في X-Shopify-Hmac-SHA256، وتوقيع واجهة واتساب السحابية وفيسبوك في X-Hub-Signature-256 مسبوقًا بـ sha256=.
شرطان للتحقق الصحيح: احسب التوقيع على جسم الطلب الخام كما وصل بالبايت، قبل أي تحليل أو إعادة تنسيق لـ JSON؛ وقارن القيمتين بمقارنة ثابتة الزمن في كودك (مثل hash_equals في PHP أو crypto.timingSafeEqual في Node) لا بمقارنة نصية عادية.
أسئلة شائعة
لماذا لا يطابق توقيعي توقيع المزود؟
أشهر سبب أن الجسم أُعيد تحويله إلى JSON قبل الحساب فتغيّرت المسافات أو ترتيب المفاتيح. استخدم الجسم الخام. والسبب الثاني خلط hex بـ Base64، والثالث مفتاح فيه مسافة زائدة.
ما الفرق بين HMAC وبصمة عادية؟
البصمة العادية يحسبها أي أحد، فلا تثبت هوية. HMAC تحتاج المفتاح السري، فمن يوقّع بها يثبت أنه يعرفه.
هل المفتاح الذي أكتبه هنا آمن؟
الحساب كله يجري في متصفحك ولا يُرسل المفتاح إلى أي خادم. مع ذلك، تجنّب لصق مفاتيح الإنتاج في أي موقع، واستخدم مفتاح بيئة اختبار متى أمكن.