التشفير في Go: التشفير والتجزئة للمبتدئين

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

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

ابدأ الدورة

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

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



لماذا نحتاج التشفير في Go؟

يُستخدم التشفير في Go من أجل:

  • تخزين كلمات المرور (التجزئة);
  • نقل البيانات عبر الشبكة (TLS/SSL);
  • التوقيعات الرقمية والمصادقة;
  • تشفير الملفات السرية.

تضمن Go الأمان من خلال واجهة برمجة تطبيقات (API) مدروسة جيدًا - من الصعب استخدام خوارزمية قديمة أو غير آمنة عن طريق الخطأ.



التجزئة في Go

التجزئة هي تحويل البيانات في اتجاه واحد إلى سلسلة ذات طول ثابت. في Go، تتولى الحزم crypto/md5 و crypto/sha1 و crypto/sha256 و crypto/sha512 هذه المهمة.



مثال: تجزئة SHA-256

package main

import ( "crypto/sha256" "fmt")

func main() { data := []byte("بيانات سرية") hash := sha256.Sum256(data) fmt.Printf("SHA256: %x", hash)}

المخرجات: SHA256: 3c3b... (64 حرفًا)



التجزئة مع الملح (Salt) لكلمات المرور

لتخزين كلمات المرور بشكل آمن، استخدم crypto/rand لتوليد الملح و crypto/sha256:

package main

import ( "crypto/rand" "crypto/sha256" "fmt")

func main() { password := []byte("كلمةالمرور123") salt := make([]byte, 16) rand.Read(salt) salted := append(salt, password...) hash := sha256.Sum256(salted) fmt.Printf("الملح: %x", salt) fmt.Printf("التجزئة: %x", hash)}

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



التشفير المتماثل: AES

AES (معيار التشفير المتقدم) هو أشهر خوارزمية تشفير متماثل. في Go، يتم تنفيذه في الحزمة crypto/aes بالاقتران مع أوضاع التشفير (crypto/cipher).



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

package main

import ( "crypto/aes" "crypto/cipher" "crypto/rand" "fmt")

func main() { key := []byte("0123456789abcdef0123456789abcdef") // 32 بايت لـ AES-256 plaintext := []byte("رسالة سرية") block, _ := aes.NewCipher(key) aead, _ := cipher.NewGCM(block) nonce := make([]byte, aead.NonceSize()) rand.Read(nonce) ciphertext := aead.Seal(nil, nonce, plaintext, nil) fmt.Printf("مشفر: %x", ciphertext) // فك التشفير decrypted, _ := aead.Open(nil, nonce, ciphertext, nil) fmt.Printf("مفكوك التشفير: %s", decrypted)}

يوفر وضع GCM (Galois/Counter Mode) السرية والمصادقة - وهو الخيار الأفضل لمعظم المهام.



التشفير غير المتماثل: RSA

يستخدم RSA زوجًا من المفاتيح (عام وخاص). في Go، يتم تنفيذه في crypto/rsa و crypto/rand.



توليد المفاتيح والتشفير

package main

import ( "crypto/rand" "crypto/rsa" "crypto/sha256" "fmt")

func main() { privateKey, _ := rsa.GenerateKey(rand.Reader, 2048) publicKey := &privateKey.PublicKey message := []byte("سر لـ RSA") label := []byte("") // التشفير بالمفتاح العام ciphertext, _ := rsa.EncryptOAEP(sha256.New(), rand.Reader, publicKey, message, label) fmt.Printf("مشفر بـ RSA: %x", ciphertext) // فك التشفير بالمفتاح الخاص plaintext, _ := rsa.DecryptOAEP(sha

توصيات