متى تستخدم كل منهما لحماية كلمات المرور والبيانات الحساسة؟
مقدمة
أمان البيانات لم يعد خيارًا، بل ضرورة في أي تطبيق ويب. من أكثر المفاهيم التي يحدث حولها خلط بين المطورين هي:
التشفير (Encryption) والتجزئة (Hashing).
كثير من المشاريع تقع في أخطاء خطيرة مثل:
- تخزين كلمات المرور بطريقة قابلة لفكها
- استخدام نفس التقنية لكل أنواع البيانات
- عدم فهم الفرق بين “إخفاء” البيانات و”حمايتها”
في هذا المقال، سنوضح الفرق بين التشفير والتجزئة بشكل عملي، ونشرح متى تستخدم كل واحدة، خاصة في سياق PHP.
ما هو التشفير (Encryption)؟
✔️ التعريف
التشفير هو عملية تحويل البيانات إلى شكل غير مفهوم، لكن يمكن إرجاعها إلى شكلها الأصلي باستخدام مفتاح (Key).
✔️ الفكرة الأساسية:
- بيانات → مشفرة
- مفتاح → يفك التشفير
✔️ مثال بسيط:
- نص عادي: "123456"
- يتم تشفيره → "xYz@89#..."
- باستخدام المفتاح → يرجع "123456"
✔️ أنواع التشفير:
1. Symmetric Encryption
- نفس المفتاح للتشفير وفك التشفير
2. Asymmetric Encryption
- مفتاح عام + مفتاح خاص
ما هي التجزئة (Hashing)؟
✔️ التعريف
التجزئة هي عملية تحويل البيانات إلى قيمة ثابتة (Hash) لا يمكن استرجاع البيانات الأصلية منها.
✔️ الفكرة الأساسية:
- بيانات → Hash
- لا يمكن الرجوع للأصل
✔️ مثال:
- كلمة مرور: "123456"
- تتحول إلى: "e10adc3949..."
لا يمكنك معرفة الكلمة الأصلية من الـ Hash.
الفرق الأساسي بين Encryption و Hashing
| العنصر | Encryption (تشفير) | Hashing (تجزئة) |
|---|---|---|
| إمكانية الاسترجاع | نعم | لا |
| الهدف | حماية البيانات أثناء النقل | حماية البيانات من التسريب |
| استخدام مفتاح | نعم | لا (في الغالب) |
| الطول | متغير | ثابت |
| الاستخدام الشائع | البيانات الحساسة | كلمات المرور |
متى تستخدم Hashing؟
✔️ لحماية كلمات المرور
هذا هو الاستخدام الأهم.
لماذا؟
- لا تحتاج معرفة كلمة المرور الأصلية
- فقط تحتاج التحقق منها
✔️ كيف يتم التحقق؟
- المستخدم يدخل كلمة المرور
- يتم تحويلها إلى Hash
- يتم مقارنتها مع المخزن
✔️ أفضل خوارزميات:
- bcrypt
- Argon2
متى تستخدم Encryption؟
✔️ لحماية البيانات القابلة للاسترجاع
مثل:
- أرقام البطاقات البنكية
- بيانات حساسة
- معلومات المستخدم
✔️ لماذا؟
لأنك تحتاج:
- قراءة البيانات لاحقًا
- استخدامها داخل النظام
مثال عملي مهم
❌ خطأ شائع:
تشفير كلمات المرور بدل تجزئتها
المشكلة:
- يمكن فك التشفير
- خطر كبير في حالة الاختراق
✔️ الحل الصحيح:
- استخدم Hashing لكلمات المرور
- استخدم Encryption للبيانات الحساسة
مقارنة عملية
| الحالة | الحل الصحيح |
|---|---|
| كلمة مرور | Hashing |
| رقم بطاقة | Encryption |
| API Keys | Encryption |
| بيانات تسجيل الدخول | Hashing |
مفهوم مهم: Salt في Hashing
✔️ ما هو Salt؟
قيمة عشوائية يتم إضافتها لكلمة المرور قبل التجزئة.
✔️ الفائدة:
- منع هجمات Rainbow Table
- زيادة الأمان
هل Hashing آمن 100%؟
لا يوجد أمان 100%، لكن:
- باستخدام خوارزميات قوية
- مع Salt
- يصبح آمن جدًا
أخطاء شائعة يجب تجنبها
- ❌ استخدام MD5 أو SHA1 لكلمات المرور
- ❌ تخزين كلمات المرور كنص عادي
- ❌ استخدام نفس المفتاح لكل شيء
- ❌ عدم حماية مفاتيح التشفير
- ❌ الخلط بين Hashing و Encryption
أفضل الممارسات في PHP
✔️ لكلمات المرور:
- استخدم دوال hashing الحديثة
- لا تخزن كلمة المرور أبدًا كنص
✔️ للبيانات الحساسة:
- استخدم تشفير قوي
- خزّن المفاتيح بشكل آمن
✔️ بشكل عام:
- طبّق مبدأ Least Privilege
- راقب النظام باستمرار
مثال من الحياة الواقعية
Hashing:
مثل بصمة الإصبع 👆
- لا يمكن استرجاع الإصبع من البصمة
Encryption:
مثل صندوق مقفول 🔐
- يمكن فتحه بالمفتاح
الأسئلة الشائعة (FAQ)
1. هل يمكن فك Hash؟
لا، Hashing مصمم ليكون غير قابل للعكس.
2. هل يمكن استخدام Encryption لكلمات المرور؟
لا، الأفضل استخدام Hashing لأنه أكثر أمانًا.
3. ما أفضل خوارزمية لكلمات المرور؟
bcrypt أو Argon2.
4. هل MD5 آمن؟
لا، يعتبر ضعيف وغير آمن.
5. هل يمكن استخدام الاثنين معًا؟
نعم، لكن كل واحد له استخدام مختلف.
خلاصة
الفرق بين التشفير والتجزئة ليس بسيطًا، لكنه أساسي جدًا في أمان التطبيقات.
- Hashing: لحماية كلمات المرور
- Encryption: لحماية البيانات التي تحتاج استرجاعها
إذا استخدمت كل واحدة في مكانها الصحيح، ستبني نظامًا آمنًا يصعب اختراقه.
أما إذا خلطت بينهما… فقد تفتح بابًا كبيرًا للمخاطر.
🚀 ابدأ رحلتك مع كرياتيفو
وخد أول خطوة حقيقية نحو مستقبلك في البرمجة
📱 ابعتلنا علي واتساب
💬 ابعتلنا علي فيسبوك