الهاليت هي واجهة تشفير عالية المستوى تعتمد على الليبسوديوم في جميع عمليات التشفير الأساسية.
تم إنشاء Halite بواسطة Paragonمبادرة المؤسسات نتيجة لجهودنا المستمرة لتحسين النظام البيئي وجعل التشفير في PHP أكثر أمانًا وأسهل في التنفيذ.
يمكنك قراءة وثائق الهاليت عبر الإنترنت.
تم إصدار الهاليت بموجب ترخيص Mozilla العام 2.0. تتوفر التراخيص التجارية من Paragon Innovation Enterprises إذا كنت ترغب في توسيع نطاق Halite دون إتاحة أعمالك المشتقة بموجب شروط MPL.
إذا كنت راضيًا عن شروط برنامج MPL لتطبيقات الويب الخلفية ولكنك ترغب في شراء عقد دعم لتطبيقك الذي يستخدم Halite، فهذه الخدمات مقدمة أيضًا من قبل Paragon Innovation Enterprises.
هام: الإصدارات السابقة من Halite كانت متاحة بموجب ترخيص GNU العام الإصدار 3 (GPLv3). يتوفر الإصدار Halite 4.0.1 والإصدارات الأحدث فقط بموجب شروط ترخيص Mozilla العامة.
قبل أن تتمكن من استخدام Halite، يجب عليك اختيار الإصدار الذي يناسب متطلبات مشروعك. تم توضيح الاختلافات بين متطلبات الإصدارات المتوفرة من Halite بإيجاز أدناه.
PHP | ليبسوديوم | PECL ليبسوديوم | يدعم | |
---|---|---|---|---|
الهاليت 5.1 وأحدث | 8.1.0 | 1.0.18 | غير متوفر (قياسي) | نشيط |
الهاليت 5.0.x | 8.0.0 | 1.0.18 | غير متوفر (قياسي) | نشيط |
الهاليت 4.1+ | 7.2.0 | 1.0.15 | غير متوفر (قياسي) | غير مدعوم |
الهاليت 4.0 | 7.2.0 | 1.0.13 | غير متوفر (قياسي) | غير مدعوم |
الهاليت 3 | 7.0.0 | 1.0.9 | 1.0.6 / 2.0.4 | غير مدعوم |
الهاليت 2 | 7.0.0 | 1.0.9 | 1.0.6 | غير مدعوم |
الهاليت 1 | 5.6.0 | 1.0.6 | 1.0.2 | غير مدعوم |
ملاحظة: يعمل إصدار Halite 5.0.x على PHP 8.0، لكن الأداء أسوأ من PHP 8.1.
إذا كنت بحاجة إلى إصدار Halite قبل الإصدار 5.1، فراجع الوثائق ذات الصلة بهذا الفرع المحدد.
لتثبيت Halite، عليك أولاً تثبيت libsodium. قد تحتاج أو لا تحتاج إلى امتداد PHP. بالنسبة لمعظم الناس، هذا يعني الجري...
sudo apt-get install php7.2-sodium
...أو أمر مكافئ لنظام التشغيل الخاص بك وإصدار PHP.
إذا كنت عالقًا، فقد يكون هذا الدليل التفصيلي الذي ساهم به @aolko مفيدًا.
بمجرد تثبيت المتطلبات الأساسية، قم بتثبيت Halite من خلال Composer:
composer require paragonie/halite:^5
يمتد الدعم المجاني (المجاني) لـ Halite فقط إلى الإصدار الرئيسي الأحدث (حاليًا 5).
إذا كانت شركتك تحتاج إلى دعم لإصدار أقدم من Halite، فاتصل بـ Paragon Innovation Enterprises للاستعلام عن خيارات الدعم التجاري.
إذا كنت بحاجة إلى طريقة سهلة للانتقال من الإصدارات القديمة من Halite، فاطلع على تراث الهاليت.
تحقق من الوثائق. تم تصميم واجهة برمجة تطبيقات Halite الأساسية من أجل البساطة:
SymmetricCrypto::encrypt
( HiddenString
، EncryptionKey
): string
SymmetricCrypto::encryptWithAD
( HiddenString
، EncryptionKey
، string
): string
SymmetricCrypto::decrypt
( string
، EncryptionKey
): HiddenString
SymmetricCrypto::decryptWithAD
( string
، EncryptionKey
، string
): HiddenString
AsymmetricCrypto::seal
( HiddenString
, EncryptionPublicKey
): string
AsymmetricCrypto::unseal
( string
، EncryptionSecretKey
): HiddenString
AsymmetricCrypto::encrypt
( HiddenString
، EncryptionSecretKey
، EncryptionPublicKey
): string
AsymmetricCrypto::encryptWithAD
( HiddenString
، EncryptionSecretKey
، EncryptionPublicKey
، string
): string
AsymmetricCrypto::decrypt
( string
، EncryptionSecretKey
، EncryptionPublicKey
): HiddenString
AsymmetricCrypto::decryptWithAD
( string
، EncryptionSecretKey
، EncryptionPublicKey
، string
): HiddenString
SymmetricCrypto::authenticate
( string
، AuthenticationKey
): string
SymmetricCrypto::verify
( string
، AuthenticationKey
، string
): bool
AsymmetricCrypto::sign
( string
, SignatureSecretKey
): string
AsymmetricCrypto::verify
( string
، SignaturePublicKey
، string
): bool
أولاً، قم بإنشاء مفتاح واستمراره مرة واحدة بالضبط:
<?php
use ParagonIE Halite KeyFactory ;
$ encKey = KeyFactory:: generateEncryptionKey ();
KeyFactory:: save ( $ encKey , ' /path/outside/webroot/encryption.key ' );
وبعد ذلك يمكنك تشفير/فك تشفير الرسائل كما يلي:
<?php
use ParagonIE Halite KeyFactory ;
use ParagonIE Halite Symmetric Crypto as Symmetric ;
use ParagonIE HiddenString HiddenString ;
$ encryptionKey = KeyFactory:: loadEncryptionKey ( ' /path/outside/webroot/encryption.key ' );
$ message = new HiddenString ( ' This is a confidential message for your eyes only. ' );
$ ciphertext = Symmetric:: encrypt ( $ message , $ encryptionKey );
$ decrypted = Symmetric:: decrypt ( $ ciphertext , $ encryptionKey );
var_dump ( $ decrypted -> getString () === $ message -> getString ()); // bool(true)
يجب أن ينتج هذا شيئًا مشابهًا لـ:
MUIDAEpQznohvNlQ-ZRk-ZZ59Mmox75D_FgAIrXY2cUfStoeL-GIeAe0m-uaeURQdPsVmc5XxRw3-2x5ZAsZH_es37qqFuLFjUI-XK9uG0s30YTsorWfpHdbnqzhRuUOI09c-cKrfMQkNBNm0dDDwZazjTC48zWikRHSHXg8NXerVDebzng1aufc_S-osI_zQuLbZDODujEnpbPZhMMcm4-SWuyVXcBPdGZolJyT
هام : يعمل الهاليت مع الكائنات
Key
، وليس مع السلاسل.
إذا حاولت echo
كائن رئيسي، فستحصل على سلسلة فارغة بدلاً من محتوياتها. إذا حاولت var_dump()
كائنًا رئيسيًا، فستحصل على بعض الحقائق حول نوع المفتاح.
يجب عليك استدعاء $obj->getRawKeyMaterial()
بشكل صريح إذا كنت تريد فحص المحتويات الثنائية الأولية للمفتاح. لا ينصح بهذا في معظم حالات الاستخدام.
<?php
use ParagonIE Halite KeyFactory ;
use ParagonIE HiddenString HiddenString ;
$ passwd = new HiddenString ( ' correct horse battery staple ' );
// Use random_bytes(16); to generate the salt:
$ salt = "xddx7bx1ex38x75x9fx72x86x0axe9xc8x58xf6x16x0dx3b" ;
$ encryptionKey = KeyFactory:: deriveEncryptionKey ( $ passwd , $ salt );
يمكن استخدام المفتاح المشتق من كلمة المرور بدلاً من المفتاح الذي تم إنشاؤه عشوائيًا.
يتضمن Halite فئة تشفير الملفات التي تستخدم واجهة برمجة التطبيقات المتدفقة للسماح بتشفير الملفات الكبيرة (مثل الجيجابايت) على نظام به ذاكرة قليلة جدًا (أي أقل من 8 ميجابايت).
<?php
use ParagonIE Halite File ;
use ParagonIE Halite KeyFactory ;
$ encryptionKey = KeyFactory:: loadEncryptionKey ( ' /path/outside/webroot/encryption.key ' );
File:: encrypt ( ' input.txt ' , ' output.txt ' , $ encryptionKey );
PHP خطأ فادح: Uncaught SodiumException: لم يتم تنفيذ هذا، لأنه لا يمكن مسح الذاكرة بشكل آمن من PHP
الحل لذلك هو التأكد من تثبيت/تمكين libsodium. انظر أعلاه في هذا الملف التمهيدي لمزيد من المعلومات.
إذا كانت شركتك تستخدم هذه المكتبة في منتجاتها أو خدماتها، فقد تكون مهتمًا بشراء عقد دعم من Paragon Innovation Enterprises.