البرمجة

تشفير البيانات بين PHP وJavaScript باستخدام Rijndael-128

في هذا السياق، يظهر لنا رغبتك في إعادة تحقيق التشفير والفك التشفير بين لغة البرمجة PHP وجافا سكريبت. يبدو أن الشيفرة المقدمة هي لتشفير وفك تشفير باستخدام خوارزمية التشفير Rijndael-128 مع وضع التشفير ECB. يمكننا بسهولة تحقيق نفس الوظائف في جافا سكريبت باستخدام مكتبة CryptoJS.

لنقم أولاً بتضمين مكتبة CryptoJS في مشروعك. يمكنك القيام بذلك عن طريق إضافة الرابط التالي إلى العنصر في صفحتك:

html
<script src="https://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js">script>

الآن، يمكنك كتابة الدوال في جافا سكريبت:

html
<script> var Security = { encrypt: function(input, key) { var blockSize = 16; // حجم كتلة البيانات var paddedInput = Security.pkcs5_pad(input, blockSize); var encrypted = CryptoJS.AES.encrypt(paddedInput, key, { mode: CryptoJS.mode.ECB }); return encrypted.toString(); }, decrypt: function(sStr, sKey) { var decrypted = CryptoJS.AES.decrypt(sStr, sKey, { mode: CryptoJS.mode.ECB }); return Security.pkcs5_unpad(decrypted.toString(CryptoJS.enc.Utf8)); }, pkcs5_pad: function(text, blockSize) { var pad = blockSize - (text.length % blockSize); return text + Array(pad + 1).join(String.fromCharCode(pad)); }, pkcs5_unpad: function(text) { var pad = text.charCodeAt(text.length - 1); return text.slice(0, -pad); } }; script>

يمكنك استخدام هذه الدوال في جافا سكريبت بنفس الطريقة التي تستخدم بها الدوال في الشيفرة PHP. يجب عليك أن تتأكد من استخدام نفس المفتاح في كلتا الحالتين لضمان التشابه في عملية التشفير وفك التشفير.

المزيد من المعلومات

في هذا السياق، يمكننا توسيع المعلومات حول عملية التشفير وفك التشفير التي تم تنفيذها في الشيفرة المقدمة في السياق السابق.

لنتعمق أكثر في العمليات المستخدمة في الشيفرة PHP:

  1. تشفير البيانات:

    • تستخدم الدالة Security::encrypt لتشفير البيانات باستخدام خوارزمية Rijndael-128 ووضع ECB.
    • يتم استخدام دالة mcrypt_get_block_size للحصول على حجم كتلة البيانات المستخدم في التشفير.
    • تُستخدم دالة Security::pkcs5_pad لتطبيق حشو PKCS5 على البيانات قبل التشفير.
    • يتم إنشاء مفتاح عشوائي باستخدام mcrypt_create_iv، ومن ثم يتم تهيئة الجلسة لتشفير البيانات باستخدام mcrypt_generic_init و mcrypt_generic، وأخيراً يتم إغلاق الجلسة بواسطة mcrypt_generic_deinit و mcrypt_module_close.
  2. فك تشفير البيانات:

    • تستخدم الدالة Security::decrypt لفك تشفير البيانات.
    • يتم استخدام دالة mcrypt_decrypt مع مفتاح معين لفك تشفير البيانات المشفرة.
    • بعد ذلك، يتم فحص البيانات المفكوكة لإزالة الحشو PKCS5 باستخدام دالة Security::pkcs5_unpad.

بالنسبة للشيفرة المقدمة في جافا سكريبت:

  1. تشفير البيانات:

    • يتم استخدام مكتبة CryptoJS لتنفيذ عملية التشفير.
    • تُستخدم دالة CryptoJS.AES.encrypt مع وضع ECB لتشفير البيانات.
    • يُطبق حشو PKCS5 باستخدام دوال Security.pkcs5_pad المعرفة في جافا سكريبت.
  2. فك تشفير البيانات:

    • يتم استخدام دالة CryptoJS.AES.decrypt لفك تشفير البيانات.
    • تُستخدم دالة Security.pkcs5_unpad لإزالة الحشو PKCS5 من البيانات المفكوكة.

لضمان التوافق بين التشفير في PHP وجافا سكريبت، يجب استخدام نفس المفتاح في كلا الاتجاهين، ويفضل أيضًا تأكيد استخدام نفس حجم كتلة البيانات ووضع التشفير (ECB) في كلتا اللغتين.

زر الذهاب إلى الأعلى