गो (Golang) में क्रिप्टोग्राफी: एन्क्रिप्शन और हैशिंग
\nगो (Golang) एक आधुनिक कंपाइल की जाने वाली भाषा है, जो अपने प्रदर्शन और क्रिप्टोग्राफ़िक एल्गोरिदम के लिए अंतर्निहित समर्थन के लिए प्रसिद्ध है। मानक लाइब्रेरी crypto डेटा सुरक्षा के लिए आवश्यक सब कुछ प्रदान करती है: सरल हैशिंग से लेकर जटिल असममित एन्क्रिप्शन तक। इस लेख में, हम मुख्य उपकरणों पर चर्चा करेंगे और व्यावहारिक कोड उदाहरण दिखाएंगे।
गो में क्रिप्टोग्राफी की आवश्यकता क्यों है?
\nगो में क्रिप्टोग्राफी का उपयोग इसके लिए किया जाता है:
\n- \n
- पासवर्ड संग्रहीत करना (हैशिंग); \n
- नेटवर्क पर डेटा स्थानांतरित करना (TLS/SSL); \n
- डिजिटल हस्ताक्षर और प्रमाणीकरण; \n
- गोपनीय फ़ाइलों का एन्क्रिप्शन। \n
गो एक सुविचारित API के माध्यम से सुरक्षा सुनिश्चित करता है - पुराने या असुरक्षित एल्गोरिदम का गलती से उपयोग करना कठिन है।
\n\nगो में हैशिंग
\nहैशिंग डेटा का एक निश्चित लंबाई की स्ट्रिंग में एकतरफा रूपांतरण है। गो में, पैकेज crypto/md5, crypto/sha1, crypto/sha256 और crypto/sha512 इसके लिए जिम्मेदार हैं।
उदाहरण: SHA-256 हैश
\npackage main\n\nimport (\n "crypto/sha256"\n "fmt"\n)\n\nfunc main() {\n data := []byte("गोपनीय डेटा")\n hash := sha256.Sum256(data)\n fmt.Printf("SHA256: %x\\n", hash)\n}\nआउटपुट: SHA256: 3c3b... (64 वर्ण)
पासवर्ड के लिए सॉल्ट के साथ हैशिंग
\nपासवर्ड को सुरक्षित रूप से संग्रहीत करने के लिए, सॉल्ट उत्पन्न करने के लिए crypto/rand और crypto/sha256 का उपयोग करें:
package main\n\nimport (\n "crypto/rand"\n "crypto/sha256"\n "fmt"\n)\n\nfunc main() {\n password := []byte("मेरापासवर्ड123")\n salt := make([]byte, 16)\n rand.Read(salt)\n \n salted := append(salt, password...)\n hash := sha256.Sum256(salted)\n fmt.Printf("सॉल्ट: %x\\n", salt)\n fmt.Printf("हैश: %x\\n", hash)\n}\nव्यवहार में, पासवर्ड के लिए bcrypt (पैकेज golang.org/x/crypto/bcrypt) का उपयोग करना बेहतर है, लेकिन सॉल्ट के साथ SHA-256 सीखने के लिए एक अच्छा विकल्प है।
सममित एन्क्रिप्शन: AES
\nAES (एडवांस्ड एन्क्रिप्शन स्टैंडर्ड) सबसे लोकप्रिय सममित एल्गोरिदम है। गो में, इसे पैकेज crypto/aes में एन्क्रिप्शन मोड (crypto/cipher) के साथ लागू किया गया है।
उदाहरण: AES-GCM एन्क्रिप्शन
\npackage main\n\nimport (\n "crypto/aes"\n "crypto/cipher"\n "crypto/rand"\n "fmt"\n)\n\nfunc main() {\n key := []byte("0123456789abcdef0123456789abcdef") // AES-256 के लिए 32 बाइट\n plaintext := []byte("गोपनीय संदेश")\n \n block, _ := aes.NewCipher(key)\n aead, _ := cipher.NewGCM(block)\n \n nonce := make([]byte, aead.NonceSize())\n rand.Read(nonce)\n \n ciphertext := aead.Seal(nil, nonce, plaintext, nil)\n fmt.Printf("एन्क्रिप्टेड: %x\\n", ciphertext)\n \n // डिक्रिप्शन\n decrypted, _ := aead.Open(nil, nonce, ciphertext, nil)\n fmt.Printf("डिक्रिप्टेड: %s\\n", decrypted)\n}\nGCM (गैलोइस/काउंटर मोड) गोपनीयता और प्रमाणीकरण सुनिश्चित करता है - अधिकांश कार्यों के लिए सबसे अच्छा विकल्प।
\n\nअसममित एन्क्रिप्शन: RSA
\nRSA कुंजियों की एक जोड़ी (सार्वजनिक और निजी) का उपयोग करता है। गो में, इसे crypto/rsa और crypto/rand में लागू किया गया है।
कुंजी उत्पादन और एन्क्रिप्शन
\npackage main\n\nimport (\n "crypto/rand"\n "crypto/rsa"\n "crypto/sha256"\n "fmt"\n)\n\nfunc main() {\n privateKey, _ := rsa.GenerateKey(rand.Reader, 2048)\n publicKey := &privateKey.PublicKey\n \n message := []byte("RSA के लिए गुप्त")\n label := []byte("")\n \n // सार्वजनिक कुंजी से एन्क्रिप्शन\n ciphertext, _ := rsa.EncryptOAEP(sha256.New(), rand.Reader, publicKey, message, label)\n fmt.Printf("RSA से एन्क्रिप्टेड: %x\\n", ciphertext)\n \n // निजी कुंजी से डिक्रिप्शन\n plaintext, _ := rsa.DecryptOAEP(sha