Node.js में क्रिप्टोग्राफी: बिल्ट-इन मॉड्यूल crypto
आधुनिक वेब डेवलपमेंट में डेटा सुरक्षा एक महत्वपूर्ण पहलू है। Node.js एक शक्तिशाली और लचीला बिल्ट-इन मॉड्यूल crypto प्रदान करता है, जो क्रिप्टोग्राफिक फंक्शनों की एक विस्तृत श्रृंखला को लागू करता है। इस मॉड्यूल को अतिरिक्त पैकेज स्थापित करने की आवश्यकता नहीं है और यह हैशिंग, सममित और असममित एन्क्रिप्शन, डिजिटल हस्ताक्षर और HMAC (Hash-based Message Authentication Code) बनाने के कार्यों को हल करने की अनुमति देता है।
इस लेख में, हम crypto की मुख्य क्षमताओं पर विस्तार से चर्चा करेंगे और व्यावहारिक कोड उदाहरण प्रस्तुत करेंगे।
मॉड्यूल crypto की मुख्य क्षमताएँ
- हैशिंग — मनमानी लंबाई के डेटा को एक निश्चित लंबाई की स्ट्रिंग में बदलना (SHA-256, SHA-512, MD5)।
- सममित एन्क्रिप्शन — एक गुप्त कुंजी के साथ एन्क्रिप्शन और डिक्रिप्शन (AES-256-CBC, AES-192-GCM)।
- असममित एन्क्रिप्शन — RSA या ECDH पर आधारित कुंजियों की जोड़ी (सार्वजनिक/निजी) के साथ एन्क्रिप्शन।
- HMAC — संदेश की अखंडता और प्रामाणिकता की जाँच के लिए गुप्त कुंजी के साथ हैशिंग।
- डिजिटल हस्ताक्षर — लेखकत्व की पुष्टि के लिए हस्ताक्षर बनाना और सत्यापित करना।
मॉड्यूल को शामिल करना
मॉड्यूल crypto Node.js में बिल्ट-इन है, इसलिए इसका आयात मानक तरीके से किया जाता है:
const crypto = require('crypto');उदाहरण 1: डेटा हैशिंग (SHA-256)
हैशिंग एक एकतरफा फंक्शन है, जिसका उपयोग अक्सर पासवर्ड स्टोर करने और फ़ाइलों की अखंडता की जाँच के लिए किया जाता है।
const data = 'PythonLib — शैक्षिक पोर्टल';
// SHA-256 हैश बनाएँconst hash = crypto.createHash('sha256');hash.update(data);const hexHash = hash.digest('hex');
console.log('मूल डेटा:', data);console.log('SHA-256 हैश:', hexHash);// आउटपुट: SHA-256 हैश: b5a1... (64 वर्ण)महत्वपूर्ण: पासवर्ड स्टोर करने के लिए सादे हैश के बजाय "सॉल्ट" वाले फंक्शन का उपयोग करें — उदाहरण के लिए, crypto.scryptSync() या pbkdf2Sync()।
उदाहरण 2: सॉल्ट के साथ पासवर्ड हैशिंग (scrypt)
const password = 'MySecurePassword123';
// यादृच्छिक सॉल्ट जनरेट करेंconst salt = crypto.randomBytes(16).toString('hex');
// सॉल्ट के साथ हैश बनाएँ (scrypt)const hash = crypto.scryptSync(password, salt, 64).toString('hex');
console.log('सॉल्ट:', salt);console.log('पासवर्ड हैश:', hash);
// जाँच के लिए उसी सॉल्ट का उपयोग करें और हैश की तुलना करेंconst isMatch = crypto.scryptSync(password, salt, 64).toString('hex') === hash;console.log('पासवर्ड मेल खाता है:', isMatch); // trueउदाहरण 3: सममित एन्क्रिप्शन AES-256-CBC
सममित एन्क्रिप्शन एन्क्रिप्शन और डिक्रिप्शन के लिए एक ही कुंजी का उपयोग करता है। एल्गोरिदम AES-256-CBC को एक इनिशियलाइज़ेशन वेक्टर (IV) की भी आवश्यकता होती है।
// एन्क्रिप्शन फंक्शनfunction encrypt(text, key) { const iv = crypto.randomBytes(16); // IV जनरेट करें const cipher = crypto.createCipheriv('aes-256-cbc', key, iv); let encrypted = cipher.update(text, 'utf8', 'hex'); encrypted += cipher.final('hex'); return { iv: iv.toString('hex'), encrypted };}
// डिक्रिप्शन फंक्शनfunction decrypt(encrypted, key, ivHex) { const iv = Buffer.from(ivHex, 'hex'); const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv); let decrypted = decipher.update(encrypted, 'hex', 'utf8'); decrypted += decipher.final('utf8'); return decrypted;}
// उपयोगconst key = crypto.randomBytes(32); // 256-बिट कुंजीconst secretMessage = 'PythonLib के लिए गुप्त डेटा';
const encryptedData = encrypt(secretMessage, key);console.log('एन्क्रिप्टेड:', encryptedData.encrypted);console.log('IV:', encryptedData.iv);
const decryptedMessage = decrypt(encryptedData.encrypted, key, encryptedData.iv);console.log('डिक्रिप्टेड:', decryptedMessage);// आउटपुट: डिक्रिप्टेड: PythonLib के लिए गुप्त डेटा