ماهو الفرق بين دوال التشفير هذه
openssl_encrypt()
و md5() و sha1()
ومتى يفضل أستخدام أحداهن على الأخريات،
وهل يوجد دوال لفك تشفير md5() و sha1() ;
الدالة openssl_encrypt تقوم بتشفير المعطيات باستخدام كلمة مرور
وهناك openssl_decrypt تقوم بفك هذا التشفير إذا أستخدمت نفس كلمة المرور
أما md5 و sha1 فهي دوال تقوم بتحويل المعطيات إلى سلسلة نصية بطول محدد تسمى hash
وهي دوال أحادية الإتجاه بمعنى أنه لا يمكن إسترجاع المعطيات الأولى من خلال hash
يفضل إستخدام sha256 عن طريق https://www.php.net/manual/...
أو إستخدام password_hash عند التعامل مع كلمات المرور https://www.php.net/manual/...
للإجابة عن السؤال بدقة ينبغي أولا إدراك الفرق بين التشفير Encoding و التجزئة Hashing.
من بين خوارزميات التشفير openssl ولهذا نجد PHP توفر دالتين openssl_encrypt و openssl_decrypt. ومن بين خوارزميات التجزئة الأشهر تماما sha والمتفرعات منها مثل sha1 و sha2 و الـ md5 وغيرها، إذ يستحيل عكسها وإستخراج الأصل من الخرج.
يتحكم في هذا غرضك في حماية المعلومة أولا، فكون التشفير عملية ثنائية الاتجاه يجعله أفضل في حالات تمرير البيانات مع مراعاة الحفاظ على النص الأصلي. أما كون التجزئة أحادية الاتجاه يجعلها أفضل في حالات تمرير البيانات أو التحقق منها مع عدم مراعاة الحفاظ على النص الأصلي. أي يمكن الوصول إلى المعلومات الأصلية المشتركة بين طرفين متصلين باستخدام مفتاح فك التشفير الصحيح بينما يتم جعل خوارزميات التجزئة فعالة بحيث تظل قيمة التجزئة غير قابلة للتراجع.
واختصارا، الهدف من التشفير هو: تأمين سرية البيانات والغرض من التجزئة هو حماية سلامة المعلومات.
واختصارا، الهدف من التشفير هو: تأمين سرية البيانات والغرض من التجزئة هو حماية سلامة المعلومات.
شكرا اخي لقد فهمت الجزء المتعلق بالتشفير، ولكن خوارزمية التجزئه لم افهمه، يعني ما الداعي لتغيير نص الى شفرة لا نستطيع بعدها الحصول على النص الاصلي، ماهو هدفها ودورها، مككن تضرب مثال نظري لافهم الدور التي تقوم به خوارزمية التجزئة
لنقل أن لدينا عمودا يخص كلمات المرور في قواعد البيانات وبطريقة ما تم الوصول إلى هاته البيانات والتحصل عليها بطريقة غير شرعية.
لنفرض أن في حال ما كانت هاته الكلمات مشفرة بخوارزمية قابلة للعكوسية، ستكون معلومات المستخدمين وحسابهم في خطر وسيتم الاستيلاء عليها بمجرد عكسها.
أما لو كانت غير عكوسة ومن المستحيل استخراج الأصل من الخرج فلن تكون البيانات متاحة رغم أنها مكشوفة بالفعل وسنحافظ بهذا على سلامة المعلومات.
وبالتالي فإن الأفضل في هاته الحالة هو تجزئة البيانات قبل تخزينها للحفاظ على سلامتها مستقبلا.
بالتأكيد ستتساءل عن طريقة توثيق المستخدمين بإستعمال هاته الكلمات لاحقا، ولكن في الحقيقة منطق التجزئة يفرض ميزة تجعله الأفضل في حماية سلامة المعلومات:
و هي في إتاحة إمكانية التحقق من أن تجزئة سلسلة نصية ما مكافئة لتجزئة سلسلة نصية أخرى. وبالتالي سيمكن أن نتحقق من أن تجزئة كلمة المرور التي أدخلها المستخدم هي نفسها تجزئة السلسلة النصية التي قام بتخزينها أثناء تسجيله للحساب، وسيمكن بهذا توثيق طلباته وتسجيل دخوله دون معرفة كلمة مروره أصلا.
إن كان لدينا نص فيه أحرف، سنقوم بتشفيره عن طريق معادلة رياضية بسيطة وهي جمع 1 لكل حرف منه على سبيل المثال:
ABC123WXY +1 => BCD234XYZ ..
لاحظ أن كل حرف تم استبداله بالحرف التالي.
مفتاح التشفير هو رقم 1
لفك التشفير نطرح من كل حرف 1 فنحصل على الحرف الأصلي، نستخدم التشفير عندما نريد للطرف الآخر القدرة على قراءة البيانات، ويكون لديه مفتاح تشفير.( اي بروتوكول يرسل بيانات عبر الانترنت بشكل مشفر HTTPS)
نطبق معادلة راضية غير عكوسة على النص مثلاً نضرب قيمة كل حرف ب 123 و نجمع لها قيمة 1 ثم نأخذ باقي القسمة على 100 (بالعادة عدد أولي مثل 13 - 17 - ..)، ثم نقتطع جزء من النص الناتج ويمكن أن نضيف له نص ثابت ثم نعيد التجزئة مرة أخرى ( زيادة التعقيد) المهم نتأكد من خسارة جزء من البيانات لكي لا نستطيع العودة للنص الأصلي
ABC123WXY => (x * 123 + 1) % 100 => 96162428517497 .. نأخذ أول 10 حروف 9616242851 => يمكن تطبيق خطوات آخرى
نلاحظ أن النص المطبق عليه التجزئة غير مفهوم و غير قابل للاستعادة.
هكذا نحفظ النصوص التي لا نريد لأحد معرفتها، فقط تطبيق الخوارزمية نفسها على النص الأصلي نفسه تجعلنا نتأكد من تطابق الدخل عند الحصول على ناتج مطابق، هكذا نتعامل مع كلمات السر، وللتأكد من تسجيل المستخدم نطبق التجزئة على كلمة السر التي يدخلها ويجب أن تطابق التجزئة الأولى التي حسبناها عند إنشاء الحساب مثلاً..
التعليقات