PHP में क्रिप्टोग्राफी: एन्क्रिप्शन और हैशिंग — पूर्ण गाइड
आधुनिक वेब डेवलपमेंट में, डेटा सुरक्षा सबसे महत्वपूर्ण प्राथमिकताओं में से एक है। PHP क्रिप्टोग्राफ़िक सुरक्षा के लिए शक्तिशाली अंतर्निहित उपकरण प्रदान करता है: सरल पासवर्ड हैशिंग से लेकर जटिल असममित एन्क्रिप्शन तक। इस लेख में, हम PHP में क्रिप्टोग्राफी के साथ काम करने के मुख्य दृष्टिकोण, लाइब्रेरी और सर्वोत्तम प्रथाओं पर चर्चा करेंगे।
1. डेटा हैशिंग
हैशिंग डेटा का एक निश्चित लंबाई की स्ट्रिंग में अपरिवर्तनीय रूपांतरण है। इसका उपयोग पासवर्ड संग्रहीत करने, फ़ाइल अखंडता की जाँच करने और डिजिटल हस्ताक्षर बनाने के लिए किया जाता है।
1.1. पासवर्ड हैशिंग (password_hash)
PHP 5.5 से शुरू करके, पासवर्ड हैशिंग के लिए password_hash() फ़ंक्शन का उपयोग करने की अनुशंसा की जाती है। यह स्वचालित रूप से एक सुरक्षित एल्गोरिदम (डिफ़ॉल्ट रूप से bcrypt) चुनता है और एक सॉल्ट उत्पन्न करता है।
<?php// पासवर्ड हैश करना$password = 'MySecurePassword123!';$hash = password_hash($password, PASSWORD_DEFAULT);
echo "हैश: " . $hash . "";
// पासवर्ड सत्यापित करनाif (password_verify($password, $hash)) { echo "पासवर्ड सही है!";} else { echo "गलत पासवर्ड!";}?>1.2. hash() के साथ हैशिंग
अन्य उद्देश्यों के लिए (जैसे फ़ाइल चेकसम), SHA-256, SHA-512 या BLAKE2 एल्गोरिदम के साथ hash() फ़ंक्शन का उपयोग करें।
<?php$data = "गोपनीय डेटा";$sha256_hash = hash('sha256', $data);$blake2b_hash = hash('blake2b', $data);
echo "SHA-256: " . $sha256_hash . "";echo "BLAKE2b: " . $blake2b_hash . "";?>2. सममित एन्क्रिप्शन
सममित एन्क्रिप्शन डेटा को एन्क्रिप्ट और डिक्रिप्ट करने के लिए एक ही कुंजी का उपयोग करता है। PHP में, इसके लिए OpenSSL एक्सटेंशन का उपयोग किया जाता है।
2.1. AES-256-GCM के साथ एन्क्रिप्शन (प्रमाणित एन्क्रिप्शन)
अनुशंसित मोड AES-256-GCM है, जो गोपनीयता और अखंडता सत्यापन प्रदान करता है।
<?php$plaintext = "गोपनीय संदेश";$key = random_bytes(32); // 256-बिट कुंजी$iv = random_bytes(12); // 96-बिट इनिशियलाइज़ेशन वेक्टर
// एन्क्रिप्शन$ciphertext = openssl_encrypt( $plaintext, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
echo "एन्क्रिप्टेड डेटा (base64): " . base64_encode($ciphertext) . "";echo "प्रमाणीकरण टैग: " . bin2hex($tag) . "";
// डिक्रिप्शन$decrypted = openssl_decrypt( $ciphertext, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
echo "डिक्रिप्ट किया गया: " . $decrypted . "";?>2.2. AES-256-CBC के साथ एन्क्रिप्शन (संगतता के लिए)
यदि पुराने सिस्टम के साथ संगतता की आवश्यकता है, तो अखंडता जाँच के लिए HMAC के साथ AES-256-CBC का उपयोग करें।
<?phpfunction encryptAesCbc($plaintext, $key) { $iv = random_bytes(16); $ciphertext = openssl_encrypt($plaintext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); $hmac = hash_hmac('sha256', $iv . $ciphertext, $key, true); return base64_encode($hmac . $iv . $ciphertext);}
function decryptAesCbc($data, $key) { $data = base64_decode($data); $hmac = substr($data, 0, 32); $iv = substr($data, 32, 16); $ciphertext = substr($data, 48); $expectedHmac = hash_hmac('sha256', $iv . $ciphertext, $key, true); if (!hash_equals($hmac, $expectedHmac)) { throw new Exception("डेटा अखंडता भंग हुई!"); } return openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);}
$key = random_bytes(32);$encrypted = encryptAesCbc("गोपनीय डेटा", $key);echo "एन्क्रिप्ट किया गया: " . $encrypted . "";echo "डिक्रिप्ट किया गया: " . decryptAesCbc($encrypted, $key) . "";?>3. असममित एन्क्रिप्शन
असममित एन्क्रिप्शन कुंजियों की एक जोड़ी का उपयोग करता है: सार्वजनिक (एन्क्रिप्शन के लिए)