
libsodium द्वारा संचालित उच्च-स्तरीय क्रिप्टोग्राफी इंटरफ़ेस
Halite एक उच्च-स्तरीय क्रिप्टोग्राफी इंटरफ़ेस है जो अपने सभी अंतर्निहित क्रिप्टोग्राफी कार्यों के लिए libsodium पर निर्भर करता है।
Halite को Paragon Initiative Enterprises द्वारा हमारे निरंतर प्रयासों के परिणामस्वरूप बनाया गया था ताकि पारिस्थितिकी तंत्र में सुधार हो सके और PHP में क्रिप्टोग्राफी को सुरक्षित और लागू करने में आसान बनाया जा सके।
आप Halite दस्तावेज़ीकरण को ऑनलाइन पढ़ सकते हैं।
Halite को Mozilla Public License 2.0 के तहत जारी किया गया है। यदि आप Halite का विस्तार करना चाहते हैं बिना अपने व्युत्पन्न कार्यों को MPL की शर्तों के तहत उपलब्ध कराए, तो वाणिज्यिक लाइसेंस Paragon Initiative Enterprises से उपलब्ध हैं।
यदि आप बैकएंड वेब अनुप्रयोगों के लिए MPL सॉफ़्टवेयर की शर्तों से संतुष्ट हैं, लेकिन Halite का उपयोग करने वाले अपने अनुप्रयोग के लिए सहायता अनुबंध खरीदना चाहते हैं, तो वे भी Paragon Initiative Enterprises द्वारा प्रदान किए जाते हैं।
महत्वपूर्ण: Halite के पुराने संस्करण GNU Public License संस्करण 3 (GPLv3) के तहत उपलब्ध थे। केवल Halite 4.0.1 और नए संस्करण Mozilla Public License की शर्तों के तहत उपलब्ध हैं।
Halite का उपयोग करने से पहले, आपको अपने प्रोजेक्ट की आवश्यकताओं के अनुरूप एक संस्करण चुनना होगा। उपलब्ध Halite संस्करणों की आवश्यकताओं के बीच अंतर नीचे संक्षेप में दर्शाए गए हैं।
नोट: 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 द्वारा योगदान यह चरण-दर-चरण मार्गदर्शिका सहायक हो सकती है।
एक बार जब आप आवश्यक शर्तें स्थापित कर लें, तो Composer के माध्यम से Halite स्थापित करें:
composer require paragonie/halite:^5
Halite के लिए निःशुल्क (gratis) सहायता केवल सबसे हाल के प्रमुख संस्करण (वर्तमान में 5) तक ही विस्तृत है।
यदि आपकी कंपनी को Halite के पुराने संस्करण के लिए सहायता की आवश्यकता है, तो वाणिज्यिक सहायता विकल्पों के बारे में पूछताछ करने के लिए Paragon Initiative Enterprises से संपर्क करें।
यदि आपको Halite के पुराने संस्करणों से माइग्रेट करने का आसान तरीका चाहिए, तो halite-legacy देखें।
दस्तावेज़ देखें। बुनियादी Halite API सरलता के लिए डिज़ाइन किया गया है:
Symmetric\Crypto::encrypt(HiddenString, EncryptionKey): stringSymmetric\Crypto::encryptWithAD(HiddenString, EncryptionKey, string): stringSymmetric\Crypto::decrypt(string, ): पहले, एक कुंजी ठीक एक बार उत्पन्न करें और सहेजें:
<?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
महत्वपूर्ण: Halite
Keyऑब्जेक्ट के साथ काम करता है, स्ट्रिंग्स के साथ नहीं।
यदि आप किसी key ऑब्जेक्ट पर echo करने का प्रयास करते हैं, तो आपको उसकी सामग्री के बजाय एक खाली स्ट्रिंग मिलेगी। यदि आप किसी key ऑब्जेक्ट पर var_dump() करने का प्रयास करते हैं, तो आपको केवल उसकी key के प्रकार के बारे में कुछ तथ्य मिलेंगे।
यदि आप किसी key की कच्ची बाइनरी सामग्री का निरीक्षण करना चाहते हैं, तो आपको स्पष्ट रूप से $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 = "\xdd\x7b\x1e\x38\x75\x9f\x72\x86\x0a\xe9\xc8\x58\xf6\x16\x0d\x3b";
$encryptionKey = KeyFactory::deriveEncryptionKey($passwd, $salt);
पासवर्ड से प्राप्त कुंजी का उपयोग यादृच्छिक रूप से उत्पन्न कुंजी के स्थान पर किया जा सकता है।
Halite में एक फ़ाइल क्रिप्टोग्राफी क्लास शामिल है जो स्ट्रीमिंग API का उपयोग करती है ताकि बड़ी फ़ाइलों (जैसे गीगाबाइट) को बहुत कम उपलब्ध मेमोरी (यानी 8 MB से कम) वाले सिस्टम पर एन्क्रिप्ट किया जा सके।
<?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 Fatal error: Uncaught SodiumException: This is not implemented, as it is not possible to securely wipe memory from PHP
इसका समाधान यह सुनिश्चित करना है कि libsodium स्थापित/सक्षम है। अधिक जानकारी के लिए इस README में ऊपर देखें।
यदि आपकी कंपनी अपने उत्पादों या सेवाओं में इस लाइब्रेरी का उपयोग करती है, तो आपको Paragon Initiative Enterprises से सहायता अनुबंध खरीदने में रुचि हो सकती है।
| PHP | libsodium | PECL libsodium | समर्थन |
|---|
| Halite 5.1 और नए संस्करण | 8.1.0 | 1.0.18 | N/A (मानक) | ✔️ सक्रिय |
| Halite 5.0.x | 8.0.0 | 1.0.18 | N/A (मानक) | ✔️ सक्रिय |
| Halite 4.1+ | 7.2.0 | 1.0.15 | N/A (मानक) | ❌ समर्थित नहीं |
| Halite 4.0 | 7.2.0 | 1.0.13 | N/A (मानक) | ❌ समर्थित नहीं |
| Halite 3 | 7.0.0 | 1.0.9 | 1.0.6 / 2.0.4 | ❌ समर्थित नहीं |
| Halite 2 | 7.0.0 | 1.0.9 | 1.0.6 | ❌ समर्थित नहीं |
| Halite 1 | 5.6.0 | 1.0.6 | 1.0.2 | ❌ समर्थित नहीं |
EncryptionKeySymmetric\Crypto::decryptWithAD(string, EncryptionKey, string): HiddenStringAsymmetric\Crypto::seal(HiddenString, EncryptionPublicKey): stringAsymmetric\Crypto::unseal(string, EncryptionSecretKey): HiddenStringAsymmetric\Crypto::encrypt(HiddenString, EncryptionSecretKey, EncryptionPublicKey): stringAsymmetric\Crypto::encryptWithAD(HiddenString, EncryptionSecretKey, EncryptionPublicKey, string): stringAsymmetric\Crypto::decrypt(string, EncryptionSecretKey, EncryptionPublicKey): HiddenStringAsymmetric\Crypto::decryptWithAD(string, EncryptionSecretKey, EncryptionPublicKey, string): HiddenStringSymmetric\Crypto::authenticate(string, AuthenticationKey): stringSymmetric\Crypto::verify(string, AuthenticationKey, string): boolAsymmetric\Crypto::sign(string, SignatureSecretKey): stringAsymmetric\Crypto::verify(string, SignaturePublicKey, string): bool