Skip to content

مولّد HMAC ومدقّق التوقيع

مولّد ومدقّق HMAC مجاني أونلاين. احسب HMAC-SHA256/SHA1/SHA384/SHA512 بمفاتيح Text أو Hex أو Base64 وإخراج Hex/Base64/Base64URL. كل شيء داخل متصفحك — المفاتيح لا تغادر الصفحة.

بدون تتبّع يعمل في المتصفّح مجاني
‏100% داخل متصفحك — رسالتك ومفتاحك السري لا يغادران جهازك أبدًا.
‏<bdi>HMAC</bdi> المُولَّد

ما هو HMAC؟

HMAC ‏(Hash-based Message Authentication Code) هو وسمٌ قصير ثابت الطول يثبت أن الرسالة غير معدَّلة وأصيلة معًا — أنها أُنتِجت ممّن يملك مفتاحًا سرّيًا مشتركًا. المُعرَّف في RFC 2104 وFIPS 198-1، يجمع HMAC أي دالة تجزئة آمنة مع مفتاح سرّي ضمن بنية متداخلة محدّدة، تُكتب كـ HMAC(K, m) = H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ m)). تربط التجزئة الداخلية المفتاح بالرسالة؛ وتغلّف التجزئة الخارجية النتيجة، وهذا ما يجعل HMAC مقاومًا لهجمات تمديد الطول التي تصيب دالتَي SHA-1 وSHA-256 العاريتين.

يوجد HMAC في كل مكان في البنية التحتية الحديثة للويب. يوقّع الـwebhooks لتتأكّد من أن الطلب الوارد جاء فعلًا من GitHub أو Stripe أو Slack أو Twilio ولم يُزوَّر. ويوقّع طلبات الـAPI ‏(‏AWS Signature Version 4 مبني على HMAC-SHA256) ليتمكّن الخادم من مصادقة المُتّصِل دون إرسال كلمة مرور عبر السلك. إنه الـS في HS256: رمز JWT موقَّع بـHS256 يحمل HMAC-SHA256 فوق ترويسته وحمولته، ويمكنك فحصه في مُرمِّز JWT. كما يدعم اشتقاق مفاتيح TLS ‏(‏HKDF)، وخوارزميات كلمات المرور لمرة واحدة ‏(‏HOTP/‏TOTP)، وسلامة الرسائل في خدمات داخلية لا حصر لها.

تحسب هذه الأداة HMAC بالكامل داخل متصفحك باستخدام crypto.subtle.sign('HMAC', ...) من Web Crypto API — نفس البدائية التي تستخدمها المتصفحات أثناء مصافحات TLS. لا يُرفع مفتاحك السري ولا رسالتك أبدًا، لذا فهي آمنة لأسرار التوقيع الإنتاجية. ولأن نفس السرّ يمكن التعبير عنه كنصٍّ خام أو hex أو base64، تتيح لك الأداة اختيار ترميز المفتاح صراحةً، ولأن المزوّدين المختلفين يتوقّعون الوسم بأشكال مختلفة، يمكنك الإخراج بـHex أو Base64 أو Base64URL. يتيح لك تبويب «التحقّق» فحص توقيعٍ استلمته، باستخدام مقارنة في زمنٍ ثابت بحيث لا يُسرِّب الفحص نفسه معلومات توقيت.

const crypto = require('crypto');

// HMAC-SHA256 with a UTF-8 text key, hex output
const hmac = crypto
  .createHmac('sha256', 'my-secret-key')
  .update('Hello, World!')
  .digest('hex');

console.log(hmac);
// → 'cf3141611e22ea26a9cac6fe41d941274dd6653622c83cba13972d177bd69699'

// Verify a signature in constant time
function verify(message, key, expectedHex) {
  const actual = crypto.createHmac('sha256', key).update(message).digest();
  const expected = Buffer.from(expectedHex, 'hex');
  return actual.length === expected.length &&
    crypto.timingSafeEqual(actual, expected);
}

الميزات الرئيسية

التوليد والتحقّق في أداة واحدة

ولّد توقيعًا في تبويب «التوليد»، أو الصق HMAC متوقَّعًا في تبويب «التحقّق» لمصادقة webhook أو رمز وارد. يستخدم التحقّق مقارنة في زمنٍ ثابت بحيث لا تُسرِّب النتيجة أبدًا معلومات توقيت.

اختر ترميز المفتاح

فسّر سرّك كـText ‏(UTF-8) أو Hexadecimal أو Base64. هذا هو الإعداد الذي تُغفِله معظم الأدوات الأخرى — وأكثر سبب شائع لحساب نظامَين قيمتَي HMAC مختلفتين لنفس المفتاح.

ثلاثة ترميزات إخراج

أخرِج الوسم كـHex ‏(webhooks الخاصة بـGitHub، وAWS)، أو Base64 ‏(‏Stripe، وTwilio، وكثير من الـAPIs)، أو Base64URL ‏(رموز JWT والرموز الآمنة في عناوين URL) ليطابق تكاملك دون تحويل يدوي.

أربع خوارزميات أصلية

HMAC-SHA256 افتراضيًا، إضافةً إلى SHA-1 وSHA-384 وSHA-512. تعمل جميعها على Web Crypto API في المتصفح، فلا توجد مكتبة تعمية بلغة JavaScript يجب الوثوق بها ولا عقوبة على الأداء.

‏100% على جانب العميل وخاص

تُعالَج مفتاحك السري ورسالتك بالكامل داخل متصفحك ولا تُرسَل أبدًا إلى أي خادم. افتح تبويب «الشبكة» وسترى صفر طلبات صادرة — آمن لأسرار التوقيع الإنتاجية.

حساب حيّ

يُعاد حساب HMAC فورًا أثناء تحريرك للرسالة أو المفتاح أو الترميز أو الخوارزمية — دون رحلة ذهاب وإياب عبر زر «توليد»، فتستطيع تجربة الترميزات حتى تطابق قيمتك قيمة الخادم.

مبنيّ على متّجهات مُختبَرة

يُتحقَّق من الإخراج مقابل متّجهات اختبار HMAC الرسمية من RFC 4231، فتستطيع الوثوق بأن الملخّصات تطابق ما يُنتجه OpenSSL ووحدة crypto في Node ومكتبة hmac في Python.

أمثلة HMAC

بداية سريعة — ‏HMAC-SHA256، إخراج hex

Hello, World!
cf3141611e22ea26a9cac6fe41d941274dd6653622c83cba13972d177bd69699

بالمفتاح "my-secret-key" ‏(ترميز المفتاح = Text)، والخوارزمية HMAC-SHA256، وصيغة الإخراج = Hex، تُنتج الرسالة "Hello, World!" القيمة cf3141611e22ea26a9cac6fe41d941274dd6653622c83cba13972d177bd69699. هذا هو ملخّص الـhex القياسي المكوّن من 64 حرفًا الذي تحصل عليه من crypto.createHmac('sha256', key).update(msg).digest('hex') في Node.

التحقّق من webhook على طريقة Stripe ‏(إخراج Base64)

{"id":42,"event":"user.created"}
Cd2f7zTKaJFeG6k+t1FcvDPn51OAZ2f4GrxkCUgMhGs=

كثير من مزوّدي الـwebhook يرسلون التوقيع بترميز Base64. بالمفتاح "whsec_test_secret" ‏(Text)، وHMAC-SHA256، وصيغة الإخراج = Base64، يُوقَّع جسم الـJSON إلى Cd2f7zTKaJFeG6k+t1FcvDPn51OAZ2f4GrxkCUgMhGs=. الصق هذه القيمة في تبويب «التحقّق» لتأكيد أن الطلب جاء فعلًا من مزوّدك قبل معالجته. داخليًا يعمل HMAC فوق نفس البدائية التي يعمل عليها مولّد تجزئة SHA-256، لكن مع مفتاح من سرّك.

متّجه مرجعي من RFC 4231

what do ya want for nothing?
5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843

هذه هي حالة الاختبار 2 من RFC 4231، الوثيقة الرسمية لمتّجهات اختبار HMAC. بالمفتاح "Jefe" ‏(Text)، وHMAC-SHA256، وإخراج Hex، تُنتج الرسالة "what do ya want for nothing?" القيمة 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. مطابقة هذه القيمة بالضبط هي الطريقة التي تثبت بها صحّة تنفيذ HMAC.

HMAC-SHA512 لملخّص أطول

The quick brown fox
36f44b125a8a90639dc46733039571792e081e0fd8685ff746784b02ed14aa35629d562c7117cde4a701570551faa5a5e1b7ef1eb5c3bcd4cc1fdb8923fcf14e

بدّل الخوارزمية إلى HMAC-SHA512 لملخّص بطول 128 حرفًا ‏(512 بت). بالمفتاح "key" ‏(Text) وإخراج Hex، تُنتج "The quick brown fox" القيمة أعلاه. ‏SHA-512 أسرع من SHA-256 على معظم العتاد ذي 64 بت ويعطي إخراجًا أكبر، رغم أن SHA-256 يبقى الافتراضي للتوافق البيني.

كيف تولّد وتتحقّق من HMAC

  1. 1

    اختر الخوارزمية

    اختر HMAC-SHA256 ‏(الافتراضية والخيار الصحيح لكل الـwebhooks والـAPIs ورموز JWT تقريبًا)، أو بدّل إلى SHA-1 أو SHA-384 أو SHA-512 لمطابقة نظامٍ يتطلّبها. تعمل الأربع جميعها أصليًا في متصفحك عبر Web Crypto API.

  2. 2

    أدخل المفتاح السري واضبط ترميزه

    اكتب أو الصق مفتاحك السري، ثم اضبط ترميز المفتاح ليطابق كيفية تفسير الخادم له: Text ‏(UTF-8) لسلسلة نصية عادية، وHex لكتلة ست عشرية، وBase64 لسرٍّ بترميز base64. الخطأ هنا هو السبب الأول لعدم تطابق HMAC، فعند الشك جرّب الثلاثة جميعًا.

  3. 3

    أدخل الرسالة

    الصق البايتات الدقيقة التي تريد توقيعها — بالنسبة لـwebhook هذا هو جسم الطلب الخام، بايتًا ببايت، دون إعادة ترميز أو تغيير في المسافات. يُعاد حساب HMAC حيًّا أثناء التحرير، دون إرسال أي شيء إلى خادم.

  4. 4

    اختر صيغة الإخراج وانسخ

    اختر Hex ‏(على طريقة GitHub)، أو Base64 ‏(على طريقة Stripe/‏AWS)، أو Base64URL ‏(على طريقة JWT) لمطابقة ما يتوقّعه تكاملك، ثم اضغط «نسخ» لأخذ التوقيع.

  5. 5

    تحقّق من توقيع موجود

    انتقل إلى تبويب «التحقّق»، والصق HMAC المتوقَّع من ترويسة أو رمز، فتؤكّد الأداة في زمنٍ ثابت ما إذا كان توقيعك المحسوب يتطابق — حتى تستطيع مصادقة الحمولة قبل التصرّف بناءً عليها.

أخطاء شائعة في HMAC

عدم تطابق ترميز المفتاح ‏(السبب الأول لعدم التطابق)

يمكن قراءة نفس السرّ كنصٍّ خام UTF-8، أو hex، أو base64 — وكل تفسير يُنتج بايتات مفتاح مختلفة تمامًا، فلن يتطابق HMAC إذا اختلفت أداتك والخادم. إذا أعطاك مزوّد سرًّا بـhex أو base64، يجب فكّ ترميزه إلى بايتات قبل التوقيع، لا توقيع السلسلة كما هي. وعندما يفشل التحقّق من توقيع، جرّب المفتاح أولًا في خيارات ترميز المفتاح الثلاثة جميعًا.

✗ خطأ
// Server stored a base64 secret but you sign the literal string
createHmac('sha256', 'c2VjcmV0LWtleQ==').update(msg)
✓ صحيح
// Decode the base64 secret to raw bytes first
createHmac('sha256', Buffer.from('c2VjcmV0LWtleQ==', 'base64')).update(msg)

عدم تطابق ترميز الإخراج

HMAC هو بايتات خام؛ وhex وbase64 وbase64url ليست سوى ترميزات نصية مختلفة لنفس القيمة. إذا أرسل الخادم توقيعًا بـbase64 وقارنته بملخّص hex لديك، فلن يتطابقا أبدًا حتى لو كانت البايتات الأساسية متطابقة. طابِق صيغة الإخراج مع ما تستخدمه الترويسة أو الرمز.

✗ خطأ
// Provider sends base64, you compare hex
expected = 'Cd2f7z...=' // base64
actual   = digest('hex') // hex — never matches
✓ صحيح
// Produce the same encoding the provider uses
actual = digest('base64')

توقيع JSON مُعاد ترميزه بدل الجسم الخام

تغطّي توقيعات الـwebhook البايتات الدقيقة التي أرسلها المزوّد. إذا حلّلت الـJSON وأعدت تحويله إلى سلسلة، فقد يتغيّر ترتيب المفاتيح والمسافات وتنسيق الأرقام، فتتغيّر البايتات وينكسر التوقيع. طبّق HMAC دائمًا على جسم الطلب الخام المُلتقَط قبل أي تحليل.

✗ خطأ
// Re-serialization changes the bytes
body = JSON.stringify(JSON.parse(rawBody))
verify(hmac(body))
✓ صحيح
// Sign the raw bytes exactly as received
verify(hmac(rawBody))

استخدام == بدل مقارنة في زمنٍ ثابت

مقارنة التوقيع المستلَم عبر == أو مساواة السلاسل البسيطة تُسرِّب معلومات توقيت، لأن المقارنة تتوقّف عند أول بايت مختلف. وعبر محاولات كثيرة يستطيع مهاجم استعادة وسمٍ صالح. استخدم دائمًا فحص مساواة في زمنٍ ثابت عند التحقّق.

✗ خطأ
if (received === computed) { /* trust */ }
✓ صحيح
if (crypto.timingSafeEqual(receivedBuf, computedBuf)) { /* trust */ }

فيمَ يُستخدم HMAC

التحقّق من توقيعات الـwebhook
يوقّع مزوّدون مثل GitHub وStripe وSlack وTwilio كل webhook بـHMAC فوق جسم الطلب وسرٍّ تشاركه أنت فقط. أعِد حساب الوسم وقارنه بالترويسة ‏(مثل X-Hub-Signature-256) لتأكيد أن الحدث أصيل قبل التصرّف بناءً عليه. استخدم تبويب «التحقّق» للقيام بذلك دون كتابة كود مؤقّت.
توقيع طلبات الـAPI
كثيرًا ما تتطلّب الـAPIs المصادَق عليها أن يوقّع العميل الطلب ‏(الطريقة، المسار، الطابع الزمني، الجسم) بـHMAC وسرٍّ مشترك بدل إرسال السرّ نفسه. ‏AWS Signature Version 4 هو المثال القياسي. تتيح لك هذه الأداة إعادة إنتاج تلك التوقيعات وتصحيحها خطوةً بخطوة.
ضمان سلامة الرسالة
عندما تمرّر رمزًا أو cookie أو رسالة بين الخدمات، فإن إرفاق HMAC يتيح للمستقبِل كشف أي عبث. ولأن الوسم يعتمد على سرّ، لا يستطيع المهاجم إعادة حسابه بعد تعديل البيانات — على عكس مجموع تحقّق عادي.
فهم توقيع JWT HS256
رمز JWT موقَّع بـHS256 هو مجرد base64url(header) + '.' + base64url(payload)، موقَّع بـHMAC-SHA256 والنتيجة مُخرَجة كـBase64URL. اضبط الخوارزمية على SHA-256 والإخراج على Base64URL هنا لترى بالضبط كيف يُنتَج ذلك التوقيع، ثم راجِع في مُرمِّز JWT.
تصحيح توقيع غير متطابق
عندما لا يتطابق HMAC لديك مع توقيع الخادم، تكون هذه الأداة أسرع وسيلة لعزل السبب: جرّب المفتاح كـText وHex وBase64، وبدّل الإخراج بين Hex وBase64، وتأكّد من أنك توقّع البايتات الخام الدقيقة — كل ذلك دون إعادة نشر أي كود.

كيف يعمل HMAC

بنية RFC 2104
يُعرَّف HMAC بأنه H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ m))، حيث ipad هو البايت 0x36 مكرَّرًا وopad هو 0x5c مكرَّرًا، كلاهما حتى حجم كتلة التجزئة. المفتاح الأطول من حجم الكتلة يُجزَّأ أولًا؛ والمفتاح الأقصر يُحشى بالأصفار. هذا التداخل من مرورين هو ما يمنح HMAC برهان أمانه، الذي يصمد حتى لو لم تكن التجزئة الأساسية مقاوِمة للتصادم.
لماذا التجزئة المُفتاحة أفضل من تجزئة عادية
التجزئة العادية تثبت فقط أن البيانات لم تتلف عرضًا، لأن أي شخص يستطيع إعادة حسابها لأي رسالة — بما فيها المعدَّلة. أما HMAC فيمزج سرًّا، فلا يستطيع إنتاج وسمٍ صالح إلا حاملو المفتاح. وهذا يحوّل «السلامة فقط» إلى سلامة زائد أصالة، وهي الخاصية التي تحتاجها فعلًا الـwebhooks والطلبات الموقَّعة.
مقاومة تمديد الطول
SHA-1 وSHA-256 وSHA-512 العارية هي تجزئات Merkle–Damgård معرّضة لتمديد الطول: بمعلومية H(secret ‖ msg) يستطيع المهاجم حساب H(secret ‖ msg ‖ extra) دون معرفة السرّ. وتنكسر بهذا مخطّطات «MAC ببادئة سرّية» الساذجة. تحيّد التجزئة الخارجية في HMAC هذا الهجوم، وهو السبب الرئيسي لاستخدام HMAC بدل تجزئة السرّ والرسالة معًا.
اختيار SHA-256 مقابل SHA-512
يُنتج HMAC-SHA256 وسمًا بطول 256 بت ‏(64 حرف hex) وهو الافتراضي للتوافق البيني — سريع ومنتشر ومدعوم في كل مكان. ويُنتج HMAC-SHA512 وسمًا بطول 512 بت ‏(128 حرف hex) وكثيرًا ما يكون أسرع على معالجات 64 بت لأن SHA-512 يستخدم كلمات 64 بت. اختر SHA-256 ما لم تتطلّب مواصفة أو نظام نظير SHA-512؛ وكلاهما آمن للمصادقة.
تنفيذ Web Crypto
تستدعي هذه الأداة crypto.subtle.importKey لتحميل مفتاحك ‏(مفكوك الترميز من Text أو Hex أو Base64) وcrypto.subtle.sign('HMAC', ...) لحساب الوسم، ثم تُرمِّز البايتات الخام كـHex أو Base64 أو Base64URL. إنه نفس التنفيذ الأصلي المُدقَّق الذي يستخدمه المتصفح لـTLS، ويعمل خارج محرّك JavaScript لأجل السرعة.

أفضل ممارسات HMAC

استخدم مفتاحًا لا يقل طوله عن طول إخراج التجزئة
لـHMAC-SHA256 استخدم سرًّا لا يقل عن 32 بايت عشوائية ‏(256 بت)؛ ولـSHA-512 استخدم 64. المفتاح القصير أو منخفض الإنتروبيا هو الحلقة الأضعف. ولّد المفاتيح من مصدر عشوائي آمن وقويّ — لا من كلمة مرور أو سلسلة نصية متوقَّعة أبدًا.
قارن الأوسمة دائمًا في زمنٍ ثابت
تحقّق من التوقيعات بمقارنة في زمنٍ ثابت ‏(‏crypto.timingSafeEqual في Node، وhmac.compare_digest في Python) بدل == أو مساواة السلاسل. تعود المقارنة الساذجة باكرًا عند أول بايت مختلف، فتُسرِّب توقيتًا قد يتيح للمهاجم استعادة وسمٍ صالح بايتًا ببايت. تبويب «التحقّق» في هذه الأداة يقارن أصلًا في زمنٍ ثابت.
لا تسجّل المفتاح السري ولا تكشفه أبدًا
أبقِ أسرار التوقيع خارج السجلات ورسائل الأخطاء وعناوين URL والكود على جانب العميل. خزّنها في مدير أسرار أو متغيّرات بيئة، وناوِبها دوريًا، واقصُر كل تكامل على مفتاحه الخاص حتى لا يخترق تسريبٌ واحد كل شيء.
فضّل HMAC-SHA256 أو أقوى
اجعل الافتراضي HMAC-SHA256؛ وارتقِ إلى SHA-384 أو SHA-512 حين يتطلّبه نظير. تجنّب HMAC-SHA1 للأنظمة الجديدة ولا تستخدم HMAC-MD5 أبدًا. ومع أن HMAC يتحمّل تجزئة أضعف أفضل ممّا قد يفعله توقيع خام، فإن الانطلاق من تجزئة حديثة يمنحك أكبر هامش.
وقّع البايتات الدقيقة، بما فيها طابع زمني
وقّع الحمولة الخام غير المعدَّلة — إعادة ترميز JSON أو قصّ المسافات يغيّر البايتات ويكسر التحقّق. لتوقيع الطلبات، أدرِج طابعًا زمنيًا أو nonce ضمن البيانات الموقَّعة وارفض التوقيعات القديمة لمنع هجمات الإعادة.

أسئلة شائعة عن HMAC

ما هو HMAC؟
HMAC ‏(Hash-based Message Authentication Code) طريقة لإثبات سلامة الرسالة وأصالتها معًا باستخدام مفتاح سرّي مشترك. تُدخِل رسالة ومفتاحًا سرّيًا إلى دالة تجزئة ‏(هنا SHA-1 أو SHA-256 أو SHA-384 أو SHA-512) ضمن البنية المتداخلة المحدّدة في RFC 2104، فتحصل على وسمٍ ثابت الطول. يستطيع أي شخص يعرف السرّ إعادة حساب الوسم والتأكّد من أن الرسالة لم تُعدَّل وأنها جاءت ممّن يملك المفتاح. إنها الآلية القياسية وراء توقيعات الـwebhook، وطلبات الـAPI الموقَّعة، وعائلة HS256 من رموز JWT.
كيف يختلف HMAC عن تجزئة عادية مثل SHA-256؟
التجزئة العادية مثل SHA-256 تثبت السلامة فقط: يستطيع أي شخص إعادة حسابها، فيستطيع أيضًا تزوير تجزئة مطابقة لرسالة معدَّلة. أما HMAC فيمزج مفتاحًا سرّيًا، فلا يستطيع إنتاج أو التحقّق من وسمٍ صالح إلا الأطراف التي تملك المفتاح — وهذا يضيف الأصالة فوق السلامة. كما يستخدم HMAC بنية متداخلة من مرورين ‏(تجزئة داخلية وخارجية بحشواتٍ مشتقّة من المفتاح) تجعله محصّنًا ضد هجمات تمديد الطول التي تصيب SHA-1 وSHA-256 العاريين. باختصار: استخدم التجزئة لكشف التلف العَرَضي، واستخدم HMAC لكشف العبث المتعمَّد من مهاجمٍ لا يعرف مفتاحك.
كيف أتحقّق من توقيع webhook وارد؟
خذ جسم الطلب الخام تمامًا كما وصل ‏(لا تُعِد ترميز الـJSON — حتى إعادة ترتيب المفاتيح تكسر التوقيع)، واختر نفس الخوارزمية التي يستخدمها مزوّدك ‏(عادة HMAC-SHA256)، وأدخل سرّ التوقيع بترميز المفتاح الصحيح، واضبط صيغة الإخراج لتطابق الترويسة ‏(Hex لبادئة sha256= لدى GitHub، وBase64 لترويسات على طريقة Stripe/‏Twilio). ثم افتح تبويب «التحقّق»، والصق التوقيع من الترويسة ‏(مثل X-Hub-Signature-256)، فتُبلِغ الأداة عن التطابق أو عدمه باستخدام مقارنة في زمنٍ ثابت. لا تثق بالحمولة إلا إذا تطابقت.
أي ترميز للمفتاح والإخراج يستخدمه خادمي؟
لا توجد إجابة عامة — يعتمد ذلك على مزوّدك، ولهذا بالضبط تُتيح هذه الأداة كليهما كخيارَين صريحين. أنماط شائعة: GitHub يستخدم سرًّا نصيًا بترميز UTF-8 وإخراج hex بأحرف صغيرة ببادئة sha256=؛ وStripe يستخدم سرًّا نصيًا وbase64؛ وAWS Signature V4 يستخدم مفاتيح ثنائية مشتقّة وhex؛ وكثير من الأنظمة الداخلية تسلّم أسرارًا بترميز base64 أو hex يجب فكّ ترميزها إلى بايتات خام قبل التوقيع. إذا لم تتطابق قيمة HMAC لديك، فالترميز هو الجاني في الغالب — جرّب نفس المفتاح بترميز Text وHex وBase64 لإيجاد التفسير الذي يتوقّعه الخادم.
هل HMAC-SHA256 آمن؟
نعم. يُعدّ HMAC-SHA256 آمنًا على نطاق واسع وهو الافتراضي الموصى به لمصادقة الرسائل. تأتي أمانته من بنية HMAC إضافةً إلى دالة تجزئة قوية، ويبقى آمنًا حتى مع وجود هجمات تصادم على التجزئة العارية — فـHMAC لا يعتمد على مقاومة التصادم كما يفعل التوقيع الرقمي. المخاطر الحقيقية تشغيلية لا خوارزمية: مفتاح سرّي ضعيف أو مُسرَّب، أو تسجيل المفتاح، أو استخدام مقارنة بزمنٍ غير ثابت. استخدم مفتاحًا عشوائيًا طويلًا وقارن الأوسمة في زمنٍ ثابت وسيصمد HMAC-SHA256.
لماذا لا يوجد HMAC-MD5 أو HMAC-SHA-3 هنا؟
هذا بحكم التصميم. تُتيح هذه الأداة فقط SHA-1 وSHA-256 وSHA-384 وSHA-512 لأنها دوال التجزئة التي يدعمها Web Crypto API الأصلي في المتصفح، ما يُبقي كل شيء سريعًا وعلى جانب العميل بالكامل دون مكتبات إضافية. حُذِف HMAC-MD5 لأن MD5 عتيق ولا ينبغي أن تبدأ أنظمة جديدة به. وحُذِف HMAC-SHA-3 لأن Web Crypto لا يطبّق SHA-3؛ وإضافته تتطلّب شحن polyfill بلغة JavaScript. ولكل الحالات الحديثة عمليًا يبقى HMAC-SHA256 الخيار الصحيح على أي حال.
HS256 ‏(HMAC) مقابل RS256 ‏(RSA) — أيّهما أستخدم لرموز JWT؟
يوقّع HS256 ويتحقّق من JWT بسرٍّ مشترك واحد عبر HMAC-SHA256، بينما يوقّع RS256 بمفتاح RSA خاص ويتحقّق بالمفتاح العام المطابق. استخدم HS256 عندما يُصدِر طرفٌ واحد الرموز ويتحقّق منها معًا ‏(تطبيق متجانس أو خدمات داخلية موثوقة يمكنها مشاركة السرّ بأمان) — فهو أبسط وأسرع. واستخدم RS256 عندما يجب أن يتحقّق أطرافٌ خارجيون أو خدمات كثيرة من الرموز دون أن يقدروا على سكّها، إذ يمكنك توزيع المفتاح العام فقط. يمكنك استكشاف البنية المُرمَّزة لكليهما في مُرمِّز JWT؛ وتوقيع HS256 هو بالضبط HMAC-SHA256 فوق الترويسة والحمولة.

أدوات ذات صلة

عرض جميع الأدوات →

مولّد تجزئة bcrypt والتحقق منها

أدوات الأمن

ولّد تجزئات كلمات المرور بـ bcrypt وتحقق منها أونلاين — تكلفة قابلة للضبط، بادئات $2b$/$2a$/$2y$. 100% في متصفحك؛ كلمة مرورك لا تُرفع أبداً.

محلّل JWT — فك ترميز الرموز

أدوات الأمن

فك ترميز رموز JWT أونلاين مع محلّل JWT المجاني. افحص الترويسة والحمولة والتوقيع وانتهاء الصلاحية والخوارزمية والمطالبات فوراً. 100% في المتصفح — رمزك لا يغادر جهازك. بلا تسجيل، بلا تتبّع.

مُنشئ وترميز JWT

أدوات الأمن

مولّد ومرمّز JWT مجاني أونلاين. ابنِ الترويسة والحمولة، ووقّع بـ HS256 أو RS256 أو ES256 فوراً. 100% في المتصفح — سرّك ومفتاحك لا يغادران جهازك.

مولّد مفتاح JWT السري — HS256/384/512

أدوات الأمن

ولّد مفتاحاً سرياً قوياً ومطابقاً للمواصفة لـ HS256/384/512 — 100% في متصفحك، لا يُرسل إلى خادم أبداً. base64url أو base64 أو hex؛ انسخه لملف .env.

مولّد تجزئة MD5 — فوري ومجاني أونلاين

أدوات الأمن

أنشئ تجزئة MD5 وSHA-256 وSHA-1 وSHA-512 فوراً — أداة مجانية تعمل في متصفّحك بدون تتبّع أو رفع بيانات. الصق النص واحصل على التجزئة في ثانية. جرّبها الآن.

مولّد كلمات مرور عشوائية — قوي وآمن ومجاني

أدوات الأمن

ولّد كلمات مرور عشوائية قوية فوراً — أداة مجانية أونلاين تعمل في متصفّحك فقط. خصّص الطول والأحرف، دُفعات حتى 50 مع تحليل الإنتروبيا. بياناتك لا تغادر جهازك.