PHP में क्रिप्टोग्राफी: डेटा का एन्क्रिप्शन और हैशिंग
\n\nआधुनिक वेब डेवलपमेंट में, डेटा सुरक्षा कोई विकल्प नहीं, बल्कि एक अनिवार्य आवश्यकता है। PHP क्रिप्टोग्राफ़िक सुरक्षा के लिए उपकरणों का एक शक्तिशाली शस्त्रागार प्रदान करता है, जो दो मुख्य दिशाओं में विभाजित है: एन्क्रिप्शन (डेटा का प्रतिवर्ती रूपांतरण) और हैशिंग (अपरिवर्तनीय रूपांतरण)। इस लेख में, हम व्यावहारिक उदाहरणों के साथ दोनों कार्यों के लिए प्रमुख PHP लाइब्रेरी और फ़ंक्शन देखेंगे।
\n\n1. PHP में क्रिप्टोग्राफी की मूल अवधारणाएँ
\n\nकोड पर जाने से पहले, दो प्रकार के संचालनों के बीच अंतर करना महत्वपूर्ण है:
\n- \n
- एन्क्रिप्शन — कुंजी की उपस्थिति में मूल टेक्स्ट को पुनर्स्थापित करने की संभावना के साथ डेटा का रूपांतरण। इसका उपयोग गोपनीय जानकारी प्रसारित करने के लिए किया जाता है। \n
- हैशिंग — एकतरफा रूपांतरण, जहाँ मूल डेटा को पुनर्स्थापित करना असंभव है। इसका उपयोग पासवर्ड संग्रहीत करने और अखंडता की जाँच के लिए किया जाता है। \n
PHP एक्सटेंशन openssl (एन्क्रिप्शन के लिए) और password_hash/hash (हैशिंग के लिए) का उपयोग करता है।
2. PHP में डेटा एन्क्रिप्शन
\n\n2.1. सममित एन्क्रिप्शन (AES)
\n\nसबसे लोकप्रिय एल्गोरिदम AES-256-GCM है, जो उच्च प्रदर्शन और अंतर्निहित प्रमाणीकरण प्रदान करता है।
\n\n<?php\n// एन्क्रिप्शन\n$data = "गुप्त संदेश";\n$key = openssl_random_pseudo_bytes(32); // 256-बिट कुंजी\n$iv = openssl_random_pseudo_bytes(12); // GCM के लिए 96-बिट वेक्टर\n\n$encrypted = openssl_encrypt(\n $data,\n 'aes-256-gcm',\n $key,\n OPENSSL_RAW_DATA,\n $iv,\n $tag\n);\n\n// ट्रांसमिशन के लिए base64 में डिकोडिंग\n$encrypted_base64 = base64_encode($iv . $tag . $encrypted);\n\n// डिक्रिप्शन\n$decoded = base64_decode($encrypted_base64);\n$iv = substr($decoded, 0, 12);\n$tag = substr($decoded, 12, 16);\n$ciphertext = substr($decoded, 28);\n\n$decrypted = openssl_decrypt(\n $ciphertext,\n 'aes-256-gcm',\n $key,\n OPENSSL_RAW_DATA,\n $iv,\n $tag\n);\n\necho "डिक्रिप्ट किया गया: " . $decrypted; // गुप्त संदेश\n?>\n\nमहत्वपूर्ण: कभी भी ECB मोड का उपयोग न करें — यह असुरक्षित है। हमेशा GCM या HMAC के साथ CBC का उपयोग करें।
\n\n2.2. असममित एन्क्रिप्शन (RSA)
\n\nकुंजी विनिमय और डिजिटल हस्ताक्षर के लिए RSA का उपयोग किया जाता है। PHP कुंजियों की एक जोड़ी (सार्वजनिक/निजी) का उपयोग करता है।
\n\n<?php\n// कुंजी जनरेशन\n$config = [\n "private_key_bits" => 2048,\n "private_key_type" => OPENSSL_KEYTYPE_RSA,\n];\n$res = openssl_pkey_new($config);\nopenssl_pkey_export($res, $privateKey);\n$publicKey = openssl_pkey_get_details($res)['key'];\n\n// सार्वजनिक कुंजी से एन्क्रिप्शन\n$data = "गोपनीय डेटा";\nopenssl_public_encrypt($data, $encrypted, $publicKey);\n\n// निजी कुंजी से डिक्रिप्शन\nopenssl_private_decrypt($encrypted, $decrypted, $privateKey);\n\necho $decrypted; // गोपनीय डेटा\n?>\n\n3. पासवर्ड हैशिंग
\n\nपासवर्ड हैशिंग एक अत्यंत महत्वपूर्ण कार्य है। PHP विशेष फ़ंक्शन प्रदान करता है जो स्वचालित रूप से सॉल्ट और गणना लागत का चयन करते हैं।
\n\n3.1. bcrypt (डिफ़ॉल्ट रूप से अनुशंसित)
\n\nPASSWORD_BCRYPT एल्गोरिदम के साथ password_hash() फ़ंक्शन स्वचालित सॉल्ट के साथ एक सुरक्षित हैश बनाता है।
<?php\n$password = "UserPassword123!";\n\n// हैशिंग\n$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);\necho "हैश: " . $hash . "\\n"; // $2y$12$...\n\n// सत्यापन\nif (password_verify($password, $hash)) {\n echo "पासवर्ड सही है!";\n} else {\n echo "गलत पासवर्ड";\n}\n\n// पुनः हैशिंग की आवश्यकता की जाँच\nif (password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 12])) {\n $newHash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);\n}\n?>\n\n3.2. Argon2 (आधुनिक मानक)
\n\nPHP 7.2 से शुरू