
أمامك ملفان بالاسم نفسه والحجم نفسه تقريبًا. كيف تعرف أن أحدهما لم يتغير؟ هنا تظهر فائدة SHA-256: تحسب لكل ملف بصمة رقمية، ثم تقارن الناتجين. إذا اختلفت البصمتان، فالبيانات ليست متطابقة.
SHA-256 باختصار: إدخال طويل، ناتج بطول ثابت
NIST يضع SHA-256 ضمن عائلة SHA-2 في معيار Secure Hash Standard. الخوارزمية تستقبل رسالة أو بيانات، ثم تنتج message digest بطول 256 بت. عند عرض هذه الـ256 بت بصيغة hexadecimal المعتادة تحصل على 64 محرفًا سداسيًا عشريًا. [المصدر: NIST FIPS 180-4]
الطول الثابت مهم: سواء أدخلت كلمة قصيرة أو ملفًا كبيرًا، طول بصمة SHA-256 نفسها يبقى 256 بت. الذي يتغير هو القيمة.
hello2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Hello
185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
الفرق الوحيد في الإدخال هو حالة الحرف الأول، لكن الناتج مختلف جذريًا.
هذه الخاصية تجعل المقارنة مفيدة جدًا: التعديل الصغير لا ينتج بصمة “قريبة” من القديمة بحيث تستطيع التخمين من شكلها.
هل SHA-256 تشفير؟ لا
التشفير مصمم بحيث يمكن استعادة البيانات الأصلية عند امتلاك المفتاح الصحيح. الـhash لا يملك “مفتاح فك” يعيد النص الأصلي. وظيفته مختلفة: إنتاج بصمة مختصرة للبيانات.
لكن عبارة “لا يمكن عكسه” تحتاج دقة. إذا كان الإدخال محتملًا من مجموعة صغيرة—مثل رقم من أربع خانات—يمكن للمهاجم تجربة كل الاحتمالات وحساب SHA-256 لها ثم مقارنة النتائج. لذلك قوة الخوارزمية لا تحول كلمة مرور ضعيفة إلى سر قوي.
التحقق من الملفات وفهم البصمة
استخدام واضح: التحقق من سلامة ملف
بعض ناشري البرامج يعرضون SHA-256 بجانب ملف التنزيل. يمكنك حساب البصمة محليًا للملف الذي وصل إليك ثم مقارنتها بالقيمة المنشورة من مصدر موثوق. التطابق يعني أن البيانات التي حسبت عليها البصمة تطابق البيانات التي أنتجت القيمة المرجعية.

لماذا لا نتوقع بصمة مختلفة الطول لكل ملف؟
فضاء المخرجات في SHA-256 يحتوي عددًا محدودًا من القيم الممكنة: 2^256. بينما عدد الرسائل الممكنة أكبر بكثير. رياضيًا، هذا يعني أن وجود رسالتين مختلفتين لهما البصمة نفسها أمر ممكن من حيث المبدأ.
ما نطلبه من hash تشفيري آمن هو أن يكون العثور عمدًا على مثل هذه التصادمات غير عملي حسابيًا وفق متطلبات الأمان. NIST ما زال يدرج SHA-256 ضمن خوارزميات SHA-2 المعتمدة في مشروع Hash Functions. [المصدر: NIST — Hash Functions]
كلمات المرور وHMAC: استخدامات مختلفة
SHA-256 وكلمات المرور: لا تستخدمه وحده
من أكثر الأخطاء شيوعًا تخزين كلمة المرور كـSHA-256 مباشر. المشكلة أن SHA-256 مصمم ليكون سريعًا، بينما تخزين كلمات المرور يحتاج آلية تجعل محاولات التخمين المكثفة مكلفة وتستخدم salt فريدًا.
الإصدار النهائي NIST SP 800-63B-4 يطلب تخزين كلمات المرور بصورة مقاومة للهجمات غير المتصلة، باستخدام password hashing scheme مع salt وعامل تكلفة، ويوصي بوظائف memory-hard وcompute-hard عند الإمكان. لذلك raw SHA-256 ليس مخطط تخزين كلمات مرور كاملًا. [المصدر: NIST SP 800-63B-4]
وماذا عن HMAC-SHA-256؟
HMAC ليس مجرد hash عادي للرسالة. هو بناء يستخدم دالة hash مع مفتاح سري لإنشاء قيمة مصادقة يمكن للطرف الذي يملك المفتاح التحقق منها. NIST يصف HMAC كآلية message authentication باستخدام hash functions ومفتاح سري مشترك. [المصدر: NIST FIPS 198-1]
لهذا لا تستبدل HMAC بمجرد SHA256(secret + message) من عندك. استخدم البناء المعياري الذي توفره مكتبة موثوقة.
متى يفيدك SHA-256 فعليًا؟
إذا تطابقت البصمتان، فالمحتوى الذي دخل إلى الخوارزمية متطابق.
مفيد لكشف التغيير أو التلف مقارنة بقيمة مرجعية حصلت عليها من مصدر موثوق.
يمكن استخدام digest كمُعرّف مرتبط بالمحتوى في بعض التصاميم، مع فهم احتمال التصادم ومتطلبات النظام.
الخوارزميات والبروتوكولات قد تستخدم SHA-256 ضمن HMAC أو تواقيع أو عمليات اشتقاق وفق مواصفات محددة.
64 محرفًا لا تعني أن SHA-256 “نص من 64 حرفًا”
ناتج SHA-256 الحقيقي هو 256 بت، أي 32 بايت. عندما تراه على مواقع التنزيل أو في أدوات المطورين كقيمة من 64 محرفًا مثل 2cf24d...، فهذا مجرد تمثيل hexadecimal للبايتات. كل بايت يعرض بمحرفين سداسيين، لذلك يصبح الطول 64 محرفًا.
هذا التفصيل يفسر بعض الالتباس عند المقارنة بين مكتبتين: مكتبة قد تعطيك byte array، وأخرى تعرض hex string، وثالثة قد تعرض Base64. إذا كان تمثيل Base64 نفسه غير واضح لك، راجع دليل Base64 وترميز URL. قد تكون البصمة الثنائية نفسها لكن طريقة العرض مختلفة، لذلك قارن القيم بعد توحيد طريقة التمثيل لا بمجرد النظر إلى طول النص.
SHA-256 يحسب البايتات الفعلية، لا ما تراه بعينك
ملفان نصيان قد يبدوان متطابقين في المحرر لكن يعطيان بصمتين مختلفتين إذا اختلفت البايتات: نهاية السطر قد تكون LF في نظام وCRLF في نظام آخر، أو قد يحتوي أحد الملفين على مسافة نهائية لا تراها بسهولة.
الأمر نفسه مع النص العربي: قبل حساب SHA-256، النص يتحول إلى بايتات بترميز محدد. إذا اختلف الترميز أو اختلفت محارف Unicode الفعلية، تتغير البصمة حتى لو بدا النص قريبًا بصريًا. لهذا عند التحقق من ملف، احسب البصمة من الملف كما هو بدل نسخ محتواه إلى محرر وإعادة حفظه ثم المقارنة.
قبل المقارنة وبين الخوارزميات المتشابهة
قبل أن تقارن بصمتين
- تأكد أنك تستخدم الخوارزمية نفسها على الطرفين: SHA-256 لا SHA-1 أو SHA-512.
- احسب البصمة من الملف نفسه، لا من اسمه أو مساره.
- إذا كانت القيمة المرجعية من الويب، تأكد أن المصدر الذي أخذتها منه موثوق.
- لا تعتبر SHA-256 وسيلة لإخفاء كلمات المرور أو الأسرار.
- إذا كنت تحتاج مصادقة للرسالة، انظر إلى HMAC أو توقيع رقمي حسب الحالة.
هل SHA-256 وSHA3-256 الشيء نفسه؟
لا. كلاهما ينتج 256 بت، لكنهما خوارزميتان مختلفتان. SHA-256 جزء من SHA-2 ومحدد في FIPS 180-4، بينما SHA3-256 جزء من SHA-3 ومحدد في FIPS 202. تشابه طول الناتج لا يجعل البصمتين قابلة للتبادل.
إذا أعطاك نظام أو API اسم الخوارزمية صراحة، التزم به حرفيًا. “256” وحدها ليست اسم خوارزمية كاملًا.
احسب SHA-256 للنصوص والبيانات التي تعمل عليها
في أدوات المطورين على تولاتي يمكنك توليد بصمة SHA-256 ومقارنتها بسهولة. استخدمها للتحقق والمقارنة، مع تذكر أن الـhash ليس تشفيرًا ولا بديلًا عن تخزين كلمات المرور بطريقة مخصصة.
المصادر الرسمية المستخدمة
- NIST FIPS 180-4 — Secure Hash Standard: المعيار الرسمي لعائلة SHA-2 ومنها SHA-256.
- NIST CSRC — Hash Functions: صفحة NIST للخوارزميات المعتمدة وموقع SHA-256 ضمن SHA-2.
- NIST SP 800-63B-4: متطلبات حديثة لتخزين كلمات المرور باستخدام salt ومخططات password hashing مناسبة.
- NIST FIPS 198-1 — HMAC: المعيار الخاص بالمصادقة المعتمدة على hash ومفتاح سري.
