


Ketahui fungsi penyulitan dan penyahsulitan dalam bahasa Go dan laksanakan algoritma penyulitan asimetri
Ketahui fungsi penyulitan dan penyahsulitan dalam bahasa Go dan laksanakan algoritma penyulitan asimetri
Dalam era maklumat moden, keselamatan data telah menjadi sangat penting. Untuk melindungi data sensitif daripada penggodam dan pelawat haram, algoritma penyulitan digunakan secara meluas. Antaranya, algoritma penyulitan asimetri popular kerana keselamatannya yang tinggi. Bahasa Go ialah bahasa pengaturcaraan yang berkuasa dan ringkas yang memberikan kita pelbagai fungsi penyulitan dan penyahsulitan untuk memastikan keselamatan data.
Artikel ini akan memperkenalkan pembelajaran penyulitan dan fungsi penyahsulitan dalam bahasa Go, dan menunjukkan cara melaksanakan algoritma penyulitan asimetri melalui contoh. Kami akan menggunakan algoritma RSA sebagai contoh untuk menunjukkan cara menjana kunci awam dan peribadi serta cara menggunakannya untuk penyulitan dan penyahsulitan.
Pertama, kita perlu memasang pustaka bahasa Go dan RSA. Selepas memasang bahasa Go, anda boleh menggunakan arahan berikut untuk memasang perpustakaan RSA:
go get -u github.com/golang/crypto
Selepas pemasangan selesai, kita boleh mula menulis kod. Pertama, kami akan menjana pasangan kunci awam dan peribadi. Ambil perhatian bahawa kunci peribadi digunakan untuk menyahsulit data, manakala kunci awam digunakan untuk menyulitkan data. Berikut ialah contoh kod untuk menjana kunci awam dan peribadi:
package main import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/pem" "fmt" "os" ) func main() { // 生成 RSA 密钥对 privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { fmt.Println("Failed to generate private key:", err) return } // 将私钥保存到文件中 privateKeyFile, err := os.Create("private.key") if err != nil { fmt.Println("Failed to create private key file:", err) return } defer privateKeyFile.Close() privateKeyBlock := &pem.Block{ Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(privateKey), } err = pem.Encode(privateKeyFile, privateKeyBlock) if err != nil { fmt.Println("Failed to encode private key:", err) return } // 将公钥保存到文件中 publicKey := &privateKey.PublicKey publicKeyFile, err := os.Create("public.key") if err != nil { fmt.Println("Failed to create public key file:", err) return } defer publicKeyFile.Close() publicKeyBlock := &pem.Block{ Type: "RSA PUBLIC KEY", Bytes: x509.MarshalPKCS1PublicKey(publicKey), } err = pem.Encode(publicKeyFile, publicKeyBlock) if err != nil { fmt.Println("Failed to encode public key:", err) return } fmt.Println("Keys generated successfully!") }
Selepas menjalankan kod di atas, dua fail akan dijana: "private.key" dan "public.key". Kedua-dua fail ini menyimpan kunci persendirian dan kunci awam masing-masing. Adalah sangat penting untuk memastikan keselamatan kunci persendirian, jadi fail kunci persendirian perlu disimpan dengan betul dalam aplikasi praktikal.
Seterusnya, kami akan menulis kod sampel untuk penyulitan dan penyahsulitan. Berikut ialah contoh penyulitan menggunakan kunci awam yang dijana:
package main import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/pem" "fmt" "io/ioutil" "os" ) func main() { // 加载公钥文件 publicKeyFile, err := os.Open("public.key") if err != nil { fmt.Println("Failed to open public key file:", err) return } defer publicKeyFile.Close() publicKeyData, err := ioutil.ReadAll(publicKeyFile) if err != nil { fmt.Println("Failed to read public key file:", err) return } publicKeyBlock, _ := pem.Decode(publicKeyData) if publicKeyBlock == nil { fmt.Println("Failed to decode public key") return } publicKey, err := x509.ParsePKCS1PublicKey(publicKeyBlock.Bytes) if err != nil { fmt.Println("Failed to parse public key:", err) return } // 加密数据 plaintext := []byte("Hello, World!") ciphertext, err := rsa.EncryptPKCS1v15(rand.Reader, publicKey, plaintext) if err != nil { fmt.Println("Failed to encrypt data:", err) return } fmt.Printf("Ciphertext: %x ", ciphertext) }
Selepas menjalankan kod di atas, teks sifir yang disulitkan akan dikeluarkan.
Akhir sekali, mari tulis contoh penyahsulitan. Berikut ialah contoh kod untuk menyahsulit teks sifir menggunakan kunci persendirian:
package main import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/pem" "fmt" "io/ioutil" "os" ) func main() { // 加载私钥文件 privateKeyFile, err := os.Open("private.key") if err != nil { fmt.Println("Failed to open private key file:", err) return } defer privateKeyFile.Close() privateKeyData, err := ioutil.ReadAll(privateKeyFile) if err != nil { fmt.Println("Failed to read private key file:", err) return } privateKeyBlock, _ := pem.Decode(privateKeyData) if privateKeyBlock == nil { fmt.Println("Failed to decode private key") return } privateKey, err := x509.ParsePKCS1PrivateKey(privateKeyBlock.Bytes) if err != nil { fmt.Println("Failed to parse private key:", err) return } // 解密数据 ciphertext := []byte{...} // 输入待解密的密文 plaintext, err := rsa.DecryptPKCS1v15(rand.Reader, privateKey, ciphertext) if err != nil { fmt.Println("Failed to decrypt data:", err) return } fmt.Printf("Plaintext: %s ", plaintext) }
Dalam kod di atas, kami membaca kunci persendirian daripada fail dan menggunakan kunci persendirian itu untuk menyahsulit teks sifir. Akhirnya, kami akan mendapat data plainteks asal.
Melalui kod contoh di atas, kita boleh mempelajari fungsi penyulitan dan penyahsulitan dalam bahasa Go dan berjaya melaksanakan algoritma penyulitan asimetri. Melindungi keselamatan data adalah tanggungjawab setiap pengaturcara Dengan fungsi berkuasa dan fungsi perpustakaan bahasa Go, kami boleh melaksanakan penyulitan dan penyahsulitan data dengan mudah, menambah keselamatan yang lebih tinggi pada aplikasi kami. Saya harap artikel ini akan membantu anda dalam mempelajari fungsi penyulitan dan penyahsulitan serta algoritma penyulitan asimetri.
Atas ialah kandungan terperinci Ketahui fungsi penyulitan dan penyahsulitan dalam bahasa Go dan laksanakan algoritma penyulitan asimetri. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apabila menggunakan Goland untuk Pembangunan Bahasa GO, banyak pemaju akan menghadapi tag struktur tersuai ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

GO Pointer Syntax dan menangani masalah dalam penggunaan perpustakaan Viper semasa pengaturcaraan dalam bahasa Go, adalah penting untuk memahami sintaks dan penggunaan petunjuk, terutama dalam ...
