Node.js में क्रिप्टोग्राफी: एन्क्रिप्शन और हैशिंग के लिए crypto मॉड्यूल
\n\nआधुनिक वेब डेवलपमेंट में डेटा सुरक्षा एक महत्वपूर्ण पहलू है। Node.js एक अंतर्निहित crypto मॉड्यूल प्रदान करता है, जो क्रिप्टोग्राफिक फ़ंक्शन लागू करता है, जिसमें सममित और असममित एन्क्रिप्शन, हैशिंग, और संदेश प्रमाणीकरण कोड (HMAC) की गणना शामिल है। इस लेख में हम व्यावहारिक उदाहरणों के साथ crypto मॉड्यूल की मुख्य क्षमताओं पर विस्तार से चर्चा करेंगे।
स्थापना और कनेक्शन
\ncrypto मॉड्यूल Node.js मानक लाइब्रेरी का हिस्सा है, इसलिए अतिरिक्त स्थापना की आवश्यकता नहीं है। उपयोग के लिए इसे आयात करना पर्याप्त है:
const crypto = require('crypto');\n\nडेटा हैशिंग
\nहैशिंग डेटा का एक निश्चित लंबाई की स्ट्रिंग में एकतरफा रूपांतरण है। सबसे लोकप्रिय एल्गोरिदम SHA-256 है। हैश का उपयोग डेटा अखंडता की जांच और पासवर्ड संग्रहीत करने (नमक के साथ संयोजन में) के लिए किया जाता है।
\n\nconst data = "गुप्त संदेश";\nconst hash = crypto.createHash('sha256')\n .update(data)\n .digest('hex');\n\nconsole.log(`SHA-256 हैश: ${hash}`);\n// आउटपुट: 64-अक्षर वाली स्ट्रिंग\n\nपासवर्ड सुरक्षा बढ़ाने के लिए हमेशा नमक (salt) और PBKDF2 या bcrypt एल्गोरिदम का उपयोग करें। PBKDF2 के साथ उदाहरण:
\n\nconst password = "उपयोगकर्ता_पासवर्ड";\nconst salt = crypto.randomBytes(16).toString('hex');\n\ncrypto.pbkdf2(password, salt, 100000, 64, 'sha512', (err, derivedKey) => {\n if (err) throw err;\n console.log(`पासवर्ड हैश: ${derivedKey.toString('hex')}`);\n console.log(`नमक: ${salt}`);\n});\n\nसममित एन्क्रिप्शन (AES)
\nसममित एन्क्रिप्शन एन्क्रिप्ट और डिक्रिप्ट करने के लिए एक ही कुंजी का उपयोग करता है। सबसे आम एल्गोरिदम AES (एडवांस्ड एन्क्रिप्शन स्टैंडर्ड) है। आइए AES-256-CBC का उपयोग करके एन्क्रिप्शन और डिक्रिप्शन देखें।
\n\nconst algorithm = 'aes-256-cbc';\nconst key = crypto.randomBytes(32); // 256-बिट कुंजी\nconst iv = crypto.randomBytes(16); // आरंभीकरण वेक्टर\n\n// एन्क्रिप्शन\nfunction encrypt(text) {\n const cipher = crypto.createCipheriv(algorithm, key, iv);\n let encrypted = cipher.update(text, 'utf8', 'hex');\n encrypted += cipher.final('hex');\n return { iv: iv.toString('hex'), encryptedData: encrypted };\n}\n\n// डिक्रिप्शन\nfunction decrypt(encryptedData, ivHex) {\n const decipher = crypto.createDecipheriv(algorithm, key, Buffer.from(ivHex, 'hex'));\n let decrypted = decipher.update(encryptedData, 'hex', 'utf8');\n decrypted += decipher.final('utf8');\n return decrypted;\n}\n\n// उपयोग का उदाहरण\nconst message = "गोपनीय डेटा";\nconst encrypted = encrypt(message);\nconsole.log(`एन्क्रिप्टेड: ${encrypted.encryptedData}`);\n\nconst decrypted = decrypt(encrypted.encryptedData, encrypted.iv);\nconsole.log(`डिक्रिप्टेड: ${decrypted}`);\n\nमहत्वपूर्ण: विभिन्न संदेशों के लिए कभी भी एक ही IV का उपयोग न करें। प्रत्येक एन्क्रिप्शन ऑपरेशन के लिए एक नया यादृच्छिक IV उत्पन्न करें।
\n\nअसममित एन्क्रिप्शन (RSA)
\nअसममित एन्क्रिप्शन कुंजियों की एक जोड़ी का उपयोग करता है: एन्क्रिप्शन के लिए सार्वजनिक (public) और डिक्रिप्शन के लिए निजी (private)। RSA सबसे लोकप्रिय एल्गोरिदम है।
\n\nconst { generateKeyPairSync, publicEncrypt, privateDecrypt } = crypto;\n\n// कुंजी उत्पादन\nconst { publicKey, privateKey } = generateKeyPairSync('rsa', {\n modulusLength: 2048,\n publicKeyEncoding: { type: 'spki', format: 'pem' },\n privateKeyEncoding: { type: 'pkcs8', format: 'pem' }\n});\n\n// सार्वजनिक कुंजी से एन्क्रिप्शन\nconst dataToEncrypt = "RSA के लिए गुप्त संदेश";\nconst encryptedData = publicEncrypt(publicKey, Buffer.from(dataToEncrypt));\nconsole.log(`RSA एन्क्रिप्टेड: ${encryptedData.toString('base64')}`);\n\n// निजी कुंजी से डिक्रिप्शन\nconst decryptedData = privateDecrypt(privateKey, encryptedData);\nco