التشفير في Go (Golang): التشفير والتجزئة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التشفير في Go (Golang): دليل شامل للتشفير والتجزئة



توفر لغة Go (Golang) مكتبة قياسية قوية crypto، والتي تتضمن جميع الأدوات اللازمة لتنفيذ الحماية التشفيرية للبيانات. في هذه المقالة، سنقوم بتحليل مفصل للوظائف الرئيسية للعمل مع التشفير والتجزئة في Go، بما في ذلك التشفير المتماثل (AES)، والتشفير غير المتماثل (RSA)، ووظائف التجزئة (SHA-256)، وحماية كلمات المرور باستخدام bcrypt.



1. تجزئة البيانات في Go



التجزئة هي تحويل أحادي الاتجاه للبيانات إلى طول ثابت. في Go، يتم استخدام حزمة crypto/sha256 (وعائلات SHA الأخرى) لهذا الغرض.



مثال: تجزئة SHA-256 لسلسلة نصية



package main

import ( "crypto/sha256" "fmt")

func main() { data := "PythonLib.ru — موقع تعليمي" hash := sha256.Sum256([]byte(data)) fmt.Printf("SHA-256: %x", hash)}


المخرجات: SHA-256: 3c4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4



للتجزئة التدفقية (للملفات الكبيرة)، استخدم واجهة hash.Hash:



package main

import ( "crypto/sha256" "fmt" "io" "strings")

func main() { h := sha256.New() reader := strings.NewReader("تيار بيانات للتجزئة") io.Copy(h, reader) fmt.Printf("SHA-256 تدفقي: %x", h.Sum(nil))}


2. حماية كلمات المرور باستخدام bcrypt



لتخزين كلمات المرور، لا تستخدم أبدًا التجزئة العادية (SHA-256). استخدم bcrypt - خوارزمية مع ملح (salt) وتعقيد تكيفي. في Go، يتم تنفيذ ذلك بواسطة حزمة golang.org/x/crypto/bcrypt.



التثبيت:

go get golang.org/x/crypto/bcrypt


مثال على تجزئة والتحقق من كلمة المرور:



package main

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

func main() { password := "MySecurePass123!"

// التجزئة (التكلفة الافتراضية = 10) hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { panic(err) } fmt.Printf("bcrypt hash: %s", hash)

// التحقق من كلمة المرور err = bcrypt.CompareHashAndPassword(hash, []byte(password)) if err != nil { fmt.Println("كلمة مرور غير صحيحة") } else { fmt.Println("كلمة المرور صحيحة!") }}


3. التشفير المتماثل AES-GCM



AES (معيار التشفير المتقدم) هو خوارزمية متماثلة. الوضع الموصى به هو GCM (وضع العداد Galois)، الذي يوفر المصادقة (AEAD). استخدم الحزم crypto/aes و crypto/cipher.



مثال على تشفير وفك تشفير AES-256-GCM:



package main

import ( "crypto/aes" "crypto/cipher" "crypto/rand" "encoding/hex" "fmt" "io")

func main() { key := []byte("مفتاح 32 بايت لـ AES-256!!!") // 32 بايت plaintext := []byte("رسالة سرية لـ PythonLib")

// التشفير ciphertext, nonce := encryptAESGCM(key, plaintext) fmt.Printf("مشفر: %s", hex.EncodeToString(ciphertext))

// فك التشفير decrypted, err := decryptAESGCM(key, ciphertext, nonce) if err != nil { panic(err) } fmt.Printf("مفكوك التشفير: %s", decrypted)}

func encryptAESGCM(key, plaintext []byte) (ciphertext, nonce []byte) { block, _ := aes.NewCipher(key) gcm, _ := cipher.NewGCM(block) nonce = make([]byte, gcm.NonceSize()) io.ReadFull(rand.Reader, nonce) return gcm.Seal(nil, nonce, plaintext, nil), nonce}

func decryptAESGCM(key, ciphertext, nonce []byte) ([]byte, error) { block, _ := aes.NewCipher(key) gcm, _ := cipher.NewGCM(block) return gcm.Open(nil, nonce, ciphertext, nil)}


4. التشفير غير المتماثل RSA



يستخدم RSA

توصيات