كيفية استخدام امتداد Sodium في ServBay
يأتي ServBay كبيئة تطوير ويب متكاملة قوية مع امتداد Sodium للـ PHP مثبتًا ومفعلًا بشكل افتراضي. Sodium هو مكتبة تشفير حديثة وسهلة الاستخدام، رائجة في عمليات تشفير البيانات والاتصالات الآمنة. بفضل ServBay، لن يحتاج المطورون إلى أي إعداد أو ترجمة إضافية لاستعمال المنتد، بل يمكنهم الاستفادة من إمكانيات التشفير وفك التشفير مباشرة في تطبيقات PHP، وذلك لضمان أمان البيانات بسهولة.
مقدمة عن امتداد Sodium
Sodium (libsodium) هو مكتبة تشفير حديثة، تهدف إلى توفير تشفير قوي وسهل الاستخدام. تدعم المكتبة العديد من خوارزميات التشفير والعمليات مثل التشفير المتماثل، التشفير غير المتماثل، التواقيع الرقمية، التشفير بالهاش، وتبادل المفاتيح. منذ إصدار PHP 7.2، تم تضمين مكتبة Sodium كامتداد أساسي في PHP، لتكون بديلاً عصريًا وأكثر أمانًا من مكتبة mcrypt التي تم إيقافها.
الميزات الرئيسية
- سهولة الاستخدام: تقدم واجهة API بسيطة لتسهيل عمليات التشفير وفك التشفير للمطورين.
- أمان عالي: تعتمد على خوارزميات تشفير حديثة وأفضل الممارسات لحماية البيانات.
- متعددة الوظائف: تدعم التشفير المتماثل وغير المتماثل، التوقيعات الرقمية، التجزئة، وتبادل المفاتيح وأكثر.
- متعددة المنصات: متوافقة مع أنظمة تشغيل ولغات برمجة متعددة.
- أداء عالي: توفر أداء متقدم في التشفير وفك التشفير، وتناسب التطبيقات التي تتطلب سرعة وأداءً عاليًا.
Sodium كبديل لـ mcrypt
كانت مكتبة mcrypt مستخدمة على نطاق واسع في PHP، لكنها أصبحت مهملة لعدم صيانتها ومن أجل ثغراتها الأمنية المحتملة، فتم إيقافها بدءًا من PHP 7.1 وأُزيلت في PHP 7.2. ونتيجة لذلك، تم اعتماد مكتبة Sodium كبديل حديث وآمن. تقدم Sodium مستوى أمان وحداثة وسهولة أعلى وأداءً فائقًا، وينصح بشدة باستخدامها بدلًا من mcrypt في مشاريع التطوير الجديدة لأغراض التشفير وفك التشفير.
تفعيل واستخدام امتداد Sodium في ServBay
يقوم ServBay تلقائيًا بتثبيت وتفعيل امتداد Sodium لجميع إصدارات PHP من 7.2 فما فوق التي يأتي بها. هذا يعني أنك كمستخدم لـ ServBay لن تضطر لتثبيت أو إعداد أي شيء إضافي. فقط شغّل ServBay واختر الإصدار المطلوب من PHP، وستتمكن من استعمال دوال Sodium مباشرة في كودك.
للتحقق من تفعيل Sodium، يمكنك استخدام دالة phpinfo() ضمن بيئة ServBay. في الواجهة، حدد إصدار PHP الذي تعمل عليه، ثم فعل خيار phpinfo()
وابحث في الصفحة عن 'sodium' وستلاحظ تفاصيل الامتداد بكل وضوح.
استخدام امتداد Sodium في كود PHP
بعد التأكد من تفعيل امتداد Sodium، يمكنك استخدام دواله مباشرة في مشروعك البرمجي. فقط احفظ ملفات PHP تحت مجلد الموقع الجذر في ServBay (المسار الافتراضي هو /Applications/ServBay/www
) أو في أي مجلد فرعي للموقع، ثم ادخل عليه من المتصفح للتجربة. فيما يلي بعض الأمثلة العملية:
مثال برمجي (تشفير متماثل)
في التشفير المتماثل، يتم استخدام نفس المفتاح لعملية التشفير والفك.
php
<?php
// الرسالة المراد تشفيرها
$message = "This is a secret message from servbay.demo";
// إنشاء مفتاح عشوائي (طول المفتاح يساوي SODIUM_CRYPTO_SECRETBOX_KEYBYTES)
$key = sodium_crypto_secretbox_keygen();
// إنشاء رقم Nonce عشوائي (عدد يُستخدَم مرة واحدة فقط ويشترط إعادة استخدامه في التشفير وفك التشفير)
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
// التشفير باستخدام المفتاح والـ Nonce
$ciphertext = sodium_crypto_secretbox($message, $nonce, $key);
echo "الرسالة الأصلية: " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // عادة يجب تخزين أو نقل الـ Nonce مع النص المشفر
echo "النص المشفر (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- عملية فك التشفير ---
// لنفترض أن لدينا النص المشفر والـ Nonce والمفتاح
$retrieved_ciphertext = $ciphertext; // من التخزين أو النقل
$retrieved_nonce = $nonce; // من التخزين أو النقل
$retrieved_key = $key; // من التخزين أو النقل
// فك التشفير باستخدام المفتاح والـ Nonce
$decrypted = sodium_crypto_secretbox_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_key);
// التحقق من نجاح عملية فك التشفير
if ($decrypted === false) {
echo "فشل في فك التشفير!\n";
} else {
echo "الرسالة المفكوكة: " . $decrypted . "\n";
}
// تنظيف البيانات الحساسة من الذاكرة
sodium_memzero($key);
sodium_memzero($retrieved_key);
if ($decrypted !== false) {
sodium_memzero($decrypted);
}
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
مثال برمجي (تشفير غير متماثل)
في التشفير غير المتماثل، توجد زوج من المفاتيح: مفتاح عام وآخر خاص. يستخدم المفتاح العام للتشفير، والخاص لفك التشفير.
php
<?php
// الرسالة المراد تشفيرها
$message = "This is another secret message for servbay-demo user";
// إنشاء زوج مفاتيح (المفتاح العام للتشفير والخاص لفك التشفير)
$keypair = sodium_crypto_box_keypair();
$publicKey = sodium_crypto_box_publickey($keypair); // يعطى للطرف الآخر بشكل علني
$secretKey = sodium_crypto_box_secretkey($keypair); // يحتفظ به لنفسه، لا يجب تسريبه إطلاقًا
echo "المفتاح العام (Base64): " . base64_encode($publicKey) . "\n";
echo "المفتاح الخاص (Base64): [مفتاح حساس، لا يجب عرضه أو تسريبه]\n\n";
// --- عملية التشفير (باستخدام المفتاح العام للمستقبل) ---
// لنفترض أن المرسل يعرف $publicKey للمستقبل
// إنشاء Nonce عشوائي، ويجب استخدام نفس الـ Nonce في التشفير وفك التشفير
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
// التشفير باستخدام المفتاح العام للمستقبل ومفتاح خاص للمرسل (في هذا المثال، نستخدم نفس الزوج للتبسيط)
// ملاحظة: في التطبيق الواقعي، هنا ينبغي الجمع بين مفتاح المرسل الخاص ومفتاح المستقبل العام
// تعتمد خوارزمية crypto_box في Sodium على طريقة تبادل المفاتيح Curve25519 (Diffie-Hellman)
// من أجل البساطة، سنجري كل العملية بنفس الزوج ويفك التشفير لنفسه
$ciphertext = sodium_crypto_box($message, $nonce, $keypair);
echo "الرسالة الأصلية: " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // يجب تخزين/نقل الـ Nonce مع النص المشفر
echo "النص المشفر (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- عملية فك التشفير (باستخدام المفتاح الخاص للمستلم) ---
// لنفترض أن المستقبل لديه النص المشفر والـ Nonce ومفتاحه الخاص ($secretKey) ومفتاح المرسل العام ($publicKey)
// في هذا المثال المبسط، سنستخدم $keypair
$retrieved_ciphertext = $ciphertext;
$retrieved_nonce = $nonce;
$retrieved_keypair = $keypair;
// فك التشفير باستخدام زوج المفاتيح الخاص به
$decrypted = sodium_crypto_box_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_keypair);
// التحقق من نجاح فك التشفير
if ($decrypted === false) {
echo "فشل في فك التشفير!\n";
} else {
echo "الرسالة المفكوكة: " . $decrypted . "\n";
}
// تنظيف البيانات الحساسة من الذاكرة
sodium_memzero($secretKey); // تنظيف المفتاح الخاص
sodium_memzero($keypair); // تنظيف زوج المفاتيح
if ($decrypted !== false) {
sodium_memzero($decrypted);
}
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
مثال برمجي (توقيع رقمي)
يستخدم التوقيع الرقمي للتحقق من سلامة الرسالة وهوية المرسل. يتم التوقيع بالخاص والتحقق بالعام.
php
<?php
// الرسالة المطلوب توقيعها
$message = "This message needs to be signed by servbay.demo";
// إنشاء زوج مفاتيح توقيع (الخاص للتوقيع، العام للتحقق)
$keypair = sodium_crypto_sign_keypair();
$publicKey = sodium_crypto_sign_publickey($keypair); // يعطى للعامة لعملية التحقق
$secretKey = sodium_crypto_sign_secretkey($keypair); // يحتفظ به لنفسه، لا يجب كشفه
echo "المفتاح العام (Base64): " . base64_encode($publicKey) . "\n";
echo "المفتاح الخاص (Base64): [مفتاح حساس، لا يجب عرضه أو تسريبه]\n\n";
// --- عملية التوقيع (باستخدام المفتاح الخاص للمرسل) ---
$signature = sodium_crypto_sign_detached($message, $secretKey);
echo "الرسالة الأصلية: " . $message . "\n";
echo "التوقيع (Base64): " . base64_encode($signature) . "\n\n";
// --- عملية التحقق (باستخدام المفتاح العام للمرسل) ---
// لنفترض أن المستقبل يملك الرسالة والتوقيع والمفتاح العام للمرسل ($publicKey)
$retrieved_message = $message;
$retrieved_signature = $signature;
$retrieved_publicKey = $publicKey;
// التحقق من صحة التوقيع بالمفتاح العام
if (sodium_crypto_sign_verify_detached($retrieved_signature, $retrieved_message, $retrieved_publicKey)) {
echo "التوقيع صحيح! لم يتم تعديل الرسالة والمرسل هو بالفعل صاحب المفتاح الخاص.\n";
} else {
echo "التوقيع غير صحيح! ربما تم تعديل الرسالة أو التوقيع ليس من صاحب المفتاح الخاص المُطابق.\n";
}
// تنظيف البيانات الحساسة من الذاكرة
sodium_memzero($secretKey); // تنظيف المفتاح الخاص
sodium_memzero($keypair); // تنظيف زوج المفاتيح
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
الخلاصة
يمنحك ServBay القدرة على استخدام امتداد Sodium المفعّل افتراضيًا مع نظامك بسهولة، دون تعقيدات تثبيت أو إعداد بيئة مكتبة التشفير محليًا. بفضل ذلك تستطيع التركيز على تطوير أمان تطبيقك عبر ميزات Sodium المتقدمة. ومع اعتباره البديل العصري والمُوصى به لمكتبة mcrypt، تصبح بنية تطبيقاتك أكثر أمانًا وموثوقية. ServBay يسهّل عليك رحلتك لبناء بيئة تطوير متكاملة وآمنة وعالية الإنتاجية.