Go में bcrypt: पासवर्ड हैशिंग की पूरी गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go के लिए bcrypt: पासवर्ड हैशिंग की संपूर्ण मार्गदर्शिका

उपयोगकर्ता डेटा की सुरक्षा आधुनिक वेब डेवलपमेंट की सबसे अहम जिम्मेदारियों में से एक है। पासवर्ड को सादे टेक्स्ट में स्टोर करना अस्वीकार्य है, और MD5 या SHA-1 जैसे सरल हैशिंग को ब्रूट-फोर्स अटैक के प्रति संवेदनशीलता के कारण लंबे समय से असुरक्षित माना जाता है। Go के लिए bcrypt लाइब्रेरी एक विश्वसनीय और समय-परीक्षित एडेप्टिव पासवर्ड हैशिंग एल्गोरिदम प्रदान करती है, जो डिक्शनरी अटैक और रेनबो टेबल अटैक दोनों के खिलाफ मजबूत है।

bcrypt एल्गोरिदम को 1999 में नील प्रोवोस और डेविड मैज़ियर ने Blowfish सिफर के आधार पर विकसित किया था। इसकी मुख्य विशेषता एडेप्टिव कॉम्प्लेक्सिटी है: आप हैशिंग इटरेशन की संख्या बढ़ा सकते हैं, जिससे कंप्यूटिंग पावर बढ़ने पर पासवर्ड क्रैक करना और भी महंगा हो जाता है। Go इकोसिस्टम में, स्टैंडर्ड लाइब्रेरी golang.org/x/crypto/bcrypt एक आधिकारिक एक्सटेंशन है और Go डेवलपर्स की टीम द्वारा समर्थित है।

इस लेख में, हम Go में bcrypt के साथ काम करने के सभी पहलुओं पर विस्तार से चर्चा करेंगे: इंस्टॉलेशन और बुनियादी उपयोग से लेकर उन्नत तकनीकों और सामान्य गलतियों तक। आप सीखेंगे कि पासवर्ड को सही तरीके से कैसे हैश करें, हैश से उनकी तुलना कैसे करें, इष्टतम कॉस्ट (cost) कैसे चुनें, और bcrypt को वास्तविक एप्लिकेशन में कैसे एकीकृत करें।

इंस्टॉलेशन

Go के लिए bcrypt लाइब्रेरी स्टैंडर्ड लाइब्रेरी का हिस्सा नहीं है, लेकिन यह आधिकारिक सब-मॉड्यूल x/crypto का हिस्सा है। इसे एक कमांड से इंस्टॉल किया जा सकता है:

go get golang.org/x/crypto/bcrypt

यह कमांड चलाने के बाद, आपके go.mod में एक डिपेंडेंसी जुड़ जाएगी, और आप अपने कोड में पैकेज को इम्पोर्ट कर सकेंगे:

import "golang.org/x/crypto/bcrypt"

सुनिश्चित करें कि आपके पास Go का वर्शन 1.13 या उससे ऊपर है (1.21+ अनुशंसित है)। यदि आप मॉड्यूल का उपयोग कर रहे हैं (जो 2024 में मानक है), तो डिपेंडेंसी अपने आप डाउनलोड हो जाएगी।

त्वरित शुरुआत: न्यूनतम कार्यशील उदाहरण

आइए सबसे सरल उदाहरण से शुरू करते हैं: पासवर्ड हैश करना और उसका सत्यापन करना। यह वह आधार है जिसका उपयोग आप किसी भी प्रोजेक्ट में करेंगे।

package main

import (
    "fmt"
    "log"
    "golang.org/x/crypto/bcrypt"
)

func main() {
    // उपयोगकर्ता का मूल पासवर्ड
    password := []byte("mySecretPassword123!")

    // डिफ़ॉल्ट कॉस्ट (10) के साथ पासवर्ड हैश करें
    hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("पासवर्ड का हैश: %s\n", hashedPassword)

    // सही पासवर्ड की जाँच करें
    err = bcrypt.CompareHashAndPassword(hashedPassword, password)
    if err != nil {
        fmt.Println("पासवर्ड मेल नहीं खाता!")
    } else {
        fmt.Println("✓ पासवर्ड मेल खाता है!")
    }

    // गलत पासवर्ड की जाँच करें
    wrongPassword := []byte("wrongPassword")
    err = bcrypt.CompareHashAndPassword(hashedPassword, wrongPassword)
    if err != nil {
        fmt.Println("✗ पासवर्ड मेल नहीं खाता (जैसा कि अपेक्षित था)")
    }
}

यह कोड तीन काम करता है: हैश जनरेट करता है, सही पासवर्ड की जाँच करता है, और यह सुनिश्चित करता है कि गलत पासवर्ड अस्वीकार कर दिया जाए। ध्यान दें: GenerateFromPassword अपने आप एक रैंडम सॉल्ट जनरेट करता है और उसे हैश में एम्बेड कर देता है, इसलिए एक ही पासवर्ड के लिए हर बार अलग-अलग हैश मिलेंगे।

मुख्य तरीके और फंक्शन

bcrypt पैकेज एक छोटा लेकिन बहुत ही सुव्यवस्थित API प्रदान करता है। आइए उदाहरणों के साथ सभी मुख्य फंक्शन को समझते हैं।

1. GenerateFromPassword

सिग्नेचर: func GenerateFromPassword(password []byte, cost int) ([]byte, error)

विवरण: पासवर्ड हैश करने का मुख्य फंक्शन। यह पासवर्ड को बाइट्स के स्लाइस के रूप में और कॉस्ट (cost) को लेता है - जो इटरेशन की संख्या का लॉगरिदमिक इंडिकेटर है। यह मानक bcrypt फॉर्मेट में हैश लौटाता है (जिसमें सॉल्ट और कॉस्ट शामिल होता है)।

अनुशंसाएँ