Node.js में क्रिप्टोग्राफी: crypto मॉड्यूल की मदद से एन्क्रिप्शन और हैशिंग
डेटा सुरक्षा आधुनिक वेब डेवलपमेंट के प्रमुख पहलुओं में से एक है। Node.js में बिल्ट-इन crypto मॉड्यूल पासवर्ड हैशिंग से लेकर असममित एन्क्रिप्शन तक क्रिप्टोग्राफ़िक सुरक्षा के लिए शक्तिशाली उपकरण प्रदान करता है। इस लेख में हम crypto मॉड्यूल के मुख्य कार्यों का विस्तार से विश्लेषण करेंगे, डेटा को एन्क्रिप्ट और डिक्रिप्ट करना सीखेंगे, साथ ही हैशिंग के माध्यम से पासवर्ड को सुरक्षित रूप से संग्रहीत करेंगे।
1. crypto मॉड्यूल को शामिल करना
crypto मॉड्यूल बिल्ट-इन है, इसलिए इसे अतिरिक्त पैकेज स्थापित करने की आवश्यकता नहीं है। इसे मानक तरीके से शामिल किया जाता है:
const crypto = require('crypto');2. डेटा हैशिंग
हैशिंग मनमानी लंबाई के डेटा को एक निश्चित लंबाई की स्ट्रिंग में बदलने की प्रक्रिया है। एन्क्रिप्शन के विपरीत, हैश फ़ंक्शन अपरिवर्तनीय है। सबसे लोकप्रिय एल्गोरिदम: SHA-256, SHA-512 हैं।
उदाहरण: SHA-256 का उपयोग करके स्ट्रिंग हैशिंग
const data = 'PythonLib — आपकी IT दुनिया की मार्गदर्शिका';const hash = crypto.createHash('sha256').update(data).digest('hex');console.log('SHA-256 हैश:', hash);उदाहरण: सॉल्ट के साथ हैशिंग (bcrypt)
पासवर्ड को सुरक्षित रूप से संग्रहीत करने के लिए bcrypt या scrypt एल्गोरिदम का उपयोग करने की अनुशंसा की जाती है। Node.js में scrypt के लिए बिल्ट-इन समर्थन है:
const password = 'mySuperPassword123';const salt = crypto.randomBytes(16).toString('hex');
crypto.scrypt(password, salt, 64, (err, derivedKey) => { if (err) throw err; console.log('पासवर्ड हैश:', derivedKey.toString('hex'));});3. सममित एन्क्रिप्शन (AES)
सममित एन्क्रिप्शन डेटा को एन्क्रिप्ट और डिक्रिप्ट करने के लिए एक ही कुंजी का उपयोग करता है। सबसे आम एल्गोरिदम AES (Advanced Encryption Standard) है।
AES-256-CBC के साथ डेटा एन्क्रिप्शन
const algorithm = 'aes-256-cbc';const key = crypto.randomBytes(32); // 256-बिट कुंजीconst iv = crypto.randomBytes(16); // इनिशियलाइज़ेशन वेक्टर
function encrypt(text) { const cipher = crypto.createCipheriv(algorithm, key, iv); let encrypted = cipher.update(text, 'utf8', 'hex'); encrypted += cipher.final('hex'); return { iv: iv.toString('hex'), encryptedData: encrypted };}
const originalText = 'PythonLib के लिए गुप्त डेटा';const encrypted = encrypt(originalText);console.log('एन्क्रिप्टेड डेटा:', encrypted);डेटा डिक्रिप्शन
function decrypt(encryptedObj) { const decipher = crypto.createDecipheriv( algorithm, key, Buffer.from(encryptedObj.iv, 'hex') ); let decrypted = decipher.update(encryptedObj.encryptedData, 'hex', 'utf8'); decrypted += decipher.final('utf8'); return decrypted;}
const decryptedText = decrypt(encrypted);console.log('डिक्रिप्टेड टेक्स्ट:', decryptedText);4. असममित एन्क्रिप्शन (RSA)
असममित एन्क्रिप्शन कुंजियों की एक जोड़ी का उपयोग करता है: सार्वजनिक (public) और निजी (private)। सार्वजनिक कुंजी से डेटा एन्क्रिप्ट किया जाता है, और निजी कुंजी से डिक्रिप्ट किया जाता है। यह HTTPS और डिजिटल हस्ताक्षरों का आधार है।
RSA कुंजी जोड़ी उत्पन्न करना
const { generateKeyPairSync } = require('crypto');
const { publicKey, privateKey } = generateKeyPairSync('rsa', { modulusLength: 2048, publicKeyEncoding: { type: 'spki', format: 'pem' }, privateKeyEncoding: { type: 'pkcs8', format: 'pem' }});
console.log('सार्वजनिक कुंजी:', publicKey);console.log('निजी कुंजी:', privateKey);RSA के साथ एन्क्रिप्शन और डिक्रिप्शन
const secretMessage = 'नमस्ते, PythonLib!';
// सार्वजनिक कुंजी से एन्क्रिप्शनconst encryptedData = crypto.publicEncrypt( { key: publicKey, padding: crypto.constants.RSA_PKCS1_OAEP_PADDING }, Buffer.from(secretMessage));console.log('एन्क्रिप्टेड डेटा:', encryptedData.toString('hex'));
// निजी कुंजी से डिक्रिप्शनconst decryptedData = crypto.privateDecrypt( { key: privateKey, padding: crypto.constants.RSA_PKCS1_OAEP_PADDING }, encryptedData);console.log('डिक्रिप्टेड संदेश:', decryptedData.toString('utf8'));5. निष्कर्ष
Node.js में crypto मॉड्यूल क्रिप्टोग्राफ़िक कार्यों की एक विस्तृत श्रृंखला प्रदान करता है: सरल हैशिंग से लेकर जटिल असममित एन्क्रिप्शन तक। हमने सीखा:
- SHA-256 और scrypt का उपयोग करके डेटा हैशिंग
- AES-256-CBC का उपयोग करके सममित एन्क्रिप्शन
- RSA का उपयोग करके असममित एन्क्रिप्शन
याद रखें: अपने स्वयं के क्रिप्टोग्राफ़िक एल्गोरिदम को लागू करने का प्रयास न करें — सिद्ध और परीक्षण किए गए मॉड्यूल का उपयोग करें। PythonLib पर अधिक उपयोगी सामग्री के लिए बने रहें!