🧠 سؤال للمحترفين: ما الفرق بين Encryption وHashing؟
كثير من المطورين والمبتدئين يستخدمون Encryption وHashing وكأنهما نفس الشيء، خصوصًا عند الحديث عن حماية كلمات المرور والبيانات.
لكن الفرق جوهري.
🔐 Encryption
التشفير هو تحويل البيانات إلى صيغة غير مفهومة باستخدام خوارزمية ومفتاح، بحيث يمكن إعادتها إلى شكلها الأصلي عند توفر المفتاح المناسب.
مثال:
لديك ملف يحتوي على معلومات حساسة.
يمكنك تشفير الملف.
الشخص الذي لا يمتلك المفتاح لن يستطيع قراءة محتواه بالشكل الطبيعي.
والهدف هنا هو:
🔐 حماية سرية البيانات مع إمكانية استرجاعها عند الحاجة.
أما:
#️⃣ Hashing
فالـ Hashing يحول البيانات إلى قيمة ثابتة نسبيًا باستخدام دالة Hash، والهدف الأساسي ليس استرجاع البيانات الأصلية، بل إنشاء بصمة رقمية لها.
مثال مشهور:
كلمات المرور.
عندما ينشئ المستخدم كلمة مرور، من الممارسات الأمنية الصحيحة عدم تخزين كلمة المرور الأصلية في قاعدة البيانات.
بدلًا من ذلك يتم استخدام Password Hashing مناسب، مع Salt وآلية مصممة لهذا الغرض.
، يتم التعامل مع كلمة المرور المدخلة ومقارنتها بالطريقة الصحيحة مع القيمة المخزنة.
لذلك:
🔐 Encryption
يمكن فكّه باستخدام المفتاح المناسب.
#️⃣ Hashing
ليس مصممًا ليتم "فك تشفيره" وإرجاع النص الأصلي.
مثال آخر:
تخزين ملف يحتاج النظام إلى قراءته لاحقًا، قد تحتاج إلى Encryption.
أما إذا أردت التحقق من أن ملفًا لم يتغير، فيمكن استخدام Hash للمقارنة بين البصمات.
وهناك خطأ شائع آخر:
استخدام Hashing عادي مثل SHA-256 لتخزين كلمات المرور مباشرة.
رغم أن SHA-256 خوارزمية قوية في سياقات كثيرة، فإن Password Hashing يحتاج إلى خوارزميات وآليات مصممة لمقاومة تخمين كلمات المرور، مثل Argon2 أو bcrypt أو scrypt، مع إعدادات مناسبة.
إذن القاعدة:
🔐 Encryption = أريد حماية البيانات وإمكانية استعادتها.
#️⃣ Hashing = أريد تمثيل البيانات ببصمة للتحقق أو الاستخدامات المناسبة الأخرى.
اختيار التقنية الصحيحة يعتمد على الهدف الأمني، وليس على اسم الخوارزمية فقط.