Bcrypt JavaScript (Node.js) के लिए: पूर्ण गाइड
1. यह क्या है और इसकी आवश्यकता क्यों है
Bcrypt एक अनुकूली क्रिप्टोग्राफिक हैश फ़ंक्शन है, जिसे विशेष रूप से पासवर्ड को सुरक्षित रूप से संग्रहीत करने के लिए डिज़ाइन किया गया है। सामान्य हैश फ़ंक्शन (MD5, SHA-1, SHA-256) के विपरीत, जो तेज़ गणना के लिए बनाए गए हैं, Bcrypt जानबूझकर धीमा और संसाधन-गहन है। यह ब्रूट-फोर्स और रेनबो टेबल हमलों को लगभग असंभव बना देता है। Node.js के लिए bcrypt लाइब्रेरी पासवर्ड को हैश करने और जांचने के लिए एक सरल और विश्वसनीय इंटरफ़ेस प्रदान करती है।
Bcrypt का उपयोग क्यों करें? जब कोई उपयोगकर्ता वेबसाइट पर रजिस्टर करता है, तो उसका पासवर्ड कभी भी सादे टेक्स्ट में संग्रहीत नहीं होना चाहिए। यदि डेटाबेस से छेड़छाड़ की जाती है, तो हमलावर को सभी पासवर्ड मिल जाएंगे। Bcrypt इस समस्या को हल करता है: आप पासवर्ड को एक अद्वितीय "सॉल्ट" के साथ हैश करते हैं और केवल हैश को स्टोर करते हैं। जब उपयोगकर्ता लॉगिन करता है, तो आप दर्ज किए गए पासवर्ड को फिर से हैश करते हैं और संग्रहीत हैश से तुलना करते हैं। Bcrypt स्वचालित रूप से सॉल्ट जनरेट करता है और इसे परिणाम में एम्बेड करता है, इसलिए आपको इसे अलग से स्टोर करने की आवश्यकता नहीं है।
Bcrypt की मुख्य विशेषता "कॉस्ट फ़ैक्टर" को समायोजित करने की क्षमता है। कॉस्ट का मान जितना अधिक होगा, हैश की गणना करने में उतना ही अधिक समय लगेगा। जैसे-जैसे कंप्यूटिंग शक्ति बढ़ती है, आप केवल कॉस्ट बढ़ा सकते हैं, और पुराने हैश मान्य रहेंगे (जाँच करते समय हैश में संग्रहीत कॉस्ट का उपयोग किया जाता है)। यह Bcrypt को हार्डवेयर त्वरण में भविष्य की प्रगति के प्रति प्रतिरोधी बनाता है।
2. इंस्टॉलेशन
Node.js प्रोजेक्ट में Bcrypt लाइब्रेरी स्थापित करने के लिए, टर्मिनल में (प्रोजेक्ट की रूट फ़ोल्डर में) निम्नलिखित कमांड चलाएँ:
npm install bcrypt
इंस्टॉलेशन के बाद, आप लाइब्रेरी को अपने कोड में इम्पोर्ट कर सकते हैं:
const bcrypt = require('bcrypt');
यदि आप ES-मॉड्यूल (package.json में type: "module") का उपयोग कर रहे हैं, तो इम्पोर्ट इस प्रकार होगा:
import bcrypt from 'bcrypt';
3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण
इस उदाहरण में, हम एक पासवर्ड को हैश करेंगे और फिर उसकी जाँच करेंगे। यह किसी भी प्रमाणीकरण प्रणाली का आधार है।
const bcrypt = require('bcrypt');
const plainPassword = 'mySuperSecretPassword123!';
const saltRounds = 10;
// पासवर्ड हैश करना
bcrypt.hash(plainPassword, saltRounds, function(err, hash) {
if (err) {
console.error('हैशिंग में त्रुटि:', err);
return;
}
console.log('पासवर्ड का हैश:', hash);
// पासवर्ड की जाँच करना
bcrypt.compare(plainPassword, hash, function(err, result) {
if (err) {
console.error('तुलना में त्रुटि:', err);
return;
}
console.log('पासवर्ड मेल खाता है:', result); // true
});
});
यह कोड दो काम करता है: पासवर्ड का हैश बनाता है और फिर जाँचता है कि मूल पासवर्ड इस हैश से मेल खाता है या नहीं। ध्यान दें कि saltRounds गणना की जटिलता निर्धारित करता है (अनुशंसित मान 10–12 है)।
4. मुख्य विधियाँ/फ़ंक्शन/क्लास
4.1. bcrypt.hash(data, saltOrRounds, callback)
सिग्नेचर: bcrypt.hash(data: string | Buffer, saltOrRounds: number | string, callback: (err: Error | null, encrypted: string) => void): void
यह क्या करता है: एक स्ट्रिंग या Buffer को एसिंक्रोनस रूप से हैश करता है। saltOrRounds एक संख्या (राउंड की संख्या) या तैयार सॉल्ट (स्ट्रिंग) हो सकता है। कॉलबैक के माध्यम से हैश लौटाता है।
उदाहरण:
bcrypt.hash('password123', 12, (err, hash) => {
if (err) throw err;
console.log(hash); // $2b$12$...
});
4.2. bcrypt.hashSync(data, saltOrRounds)
सिग्नेचर: bcrypt.hashSync(data: string | Buffer, saltOrRounds: number | string): string
यह क्या करता है: bcrypt.hash का सिंक्रोनस वर्जन। यह सीधे हैश स्ट्रिंग लौटाता है।
उदाहरण:
const hash = bcrypt.hashSync('password123', 10);
console.log(hash); // $2b$10$...
4.3. bcrypt.compare(data, encrypted, callback)
सिग्नेचर: bcrypt.compare(data: string | Buffer, encrypted: string, callback: (err: Error | null, same: boolean) => void): void
यह क्या करता है: एसिंक्रोनस रूप से सादे टेक्स्ट data की तुलना हैश किए गए encrypted स्ट्रिंग से करता है। अगर मेल खाता है तो true लौटाता है, अन्यथा false।
उदाहरण:
bcrypt.compare('password123', hash, (err, result) => {
if (err) throw err;
console.log(result); // true या false
});
4.4. bcrypt.compareSync(data, encrypted)
सिग्नेचर: bcrypt.compareSync(data: string | Buffer, encrypted: string): boolean
यह क्या करता है: bcrypt.compare का सिंक्रोनस वर्जन। सीधे बूलियन मान लौटाता है।
उदाहरण:
const isMatch = bcrypt.compareSync('password123', hash);
console.log(isMatch); // true या false
4.5. bcrypt.genSalt(rounds, callback)
सिग्नेचर: bcrypt.genSalt(rounds: number, callback: (err: Error | null, salt: string) => void): void
यह क्या करता है: एसिंक्रोनस रूप से एक सॉल्ट जनरेट करता है। rounds कॉस्ट फ़ैक्टर निर्धारित करता है।
उदाहरण:
bcrypt.genSalt(10, (err, salt) => {
if (err) throw err;
console.log(salt); // $2b$10$...
});
4.6. bcrypt.genSaltSync(rounds)
सिग्नेचर: bcrypt.genSaltSync(rounds: number): string
यह क्या करता है: bcrypt.genSalt का सिंक्रोनस वर्जन। सीधे सॉल्ट स्ट्रिंग लौटाता है।
उदाहरण:
const salt = bcrypt.genSaltSync(12);
console.log(salt); // $2b$12$...
5. निष्कर्ष
Bcrypt Node.js में पासवर्ड सुरक्षा के लिए एक मानक और विश्वसनीय समाधान है। इसकी प्रमुख विशेषताएँ हैं: स्वचालित सॉल्ट जनरेशन, समायोज्य कॉस्ट फ़ैक्टर, और एसिंक्रोनस/सिंक्रोनस दोनों API। हमेशा कम से कम 10-12 के कॉस्ट फ़ैक्टर का उपयोग करें, और पासवर्ड को कभी भी सादे टेक्स्ट में स्टोर न करें। Bcrypt आपके एप्लिकेशन को डेटा उल्लंघनों और पासवर्ड क्रैकिंग हमलों से बचाने में मदद करता है।
पुस्तकालय में भी
Kotlin में XML के साथ काम करना: पार्सिंग और निर्माण के लिए लाइब्रेरीज़ और टूल्स
TypeScript में लॉगिंग: winston लाइब्रेरी
Gorilla Mux Go: पूरी गाइड उदाहरणों के साथ
Rust में इमेज प्रोसेसिंग: image, fast_image_resize और अन्य लाइब्रेरीज़ की गाइड
C# (.NET) के लिए CLI फ्रेमवर्क: System.CommandLine और Spectre.Console