Rumah >pembangunan bahagian belakang >Golang >prosedur tersimpan yang disulitkan golang

prosedur tersimpan yang disulitkan golang

WBOY
WBOYasal
2023-05-15 10:18:37677semak imbas

Dengan perkembangan pesat Internet, isu keselamatan maklumat telah menarik lebih banyak perhatian. Antaranya, keselamatan data dalam pangkalan data adalah amat penting. Oleh itu, dalam aplikasi praktikal, sangat perlu untuk menyulitkan data dalam pangkalan data. Artikel ini memperkenalkan proses storan yang disulitkan berdasarkan golang untuk memastikan keselamatan data.

1. Algoritma penyulitan Golang

Golang menyediakan pelbagai algoritma penyulitan. Algoritma penyulitan biasa terutamanya termasuk md5, sha, AES, dsb., yang perlu dipilih mengikut keperluan dalam aplikasi sebenar. Berikut adalah algoritma penyulitan golang biasa.

  1. algoritma md5

md5 ialah salah satu algoritma ringkasan yang paling biasa Kerana kodnya tidak boleh diubah, ia sering digunakan untuk penyimpanan kata laluan. Algoritma ini boleh mencerna mesej dari sebarang panjang ke dalam data panjang 128-bit, biasanya diwakili sebagai rentetan heksadesimal.

Pakej md5 disediakan dalam golang, yang boleh digunakan melalui kod berikut:

import (
   "crypto/md5"
   "fmt"
)
func main() {
   str:="hello,world"
   h:=md5.Sum([]byte(str))
   fmt.Printf("%x",h)
}
  1. algoritma sha

sha ialah sejenis selamat algoritma cincang , yang biasa digunakan dalam piawaian tandatangan digital. Sama seperti md5, terdapat banyak variasi sha, yang mana sha256 adalah yang paling biasa. Ia boleh mencerna mesej dalam apa-apa panjang ke dalam maklumat panjang 256-bit, sambil mencapai tujuan untuk menentang serangan perlanggaran kekerasan.

Pakej sha256 disediakan dalam golang, yang boleh digunakan melalui kod berikut:

import (
   "crypto/sha256"
   "fmt"
)
func main() {
   str:="hello,world"
   h:=sha256.Sum256([]byte(str))
   fmt.Printf("%x",h)
}
  1. Algoritma AES

AES ialah standard penyulitan lanjutan Algoritma penyulitan simetri. Ia menukar teks biasa dengan panjang tertentu kepada teks sifir dengan panjang tertentu melalui algoritma Melalui algoritma yang sama, teks sifir boleh dipulihkan kepada teks biasa. Dalam aplikasi, menyimpan data sensitif dengan penyulitan AES boleh meningkatkan keselamatan data dengan ketara.

Pakej crypto/aes disediakan dalam golang, yang boleh digunakan melalui kod berikut:

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

func main() {
   key:=[]byte("mykey1234567890")
   plaintext:=[]byte("hello,world")
   block,_:=aes.NewCipher(key)
   ciphertext:=make([]byte,len(plaintext))
   iv:=[]byte("1234567890123456")
   stream:=cipher.NewCTR(block,iv)
   stream.XORKeyStream(ciphertext,plaintext)
   fmt.Printf("%x
",ciphertext)
}

2. Proses storan disulitkan Golang

Dalam aplikasi sebenar, data dalam pangkalan data tidak sesuai Teks biasa disimpan secara langsung Untuk mengelakkan kebocoran maklumat sensitif, ia biasanya disimpan secara disulitkan. Berikut ialah prosedur tersimpan yang disulitkan berdasarkan golang:

  1. Import pakej crypto/aes, crypto/cipher, crypto/md5.
import (
   "crypto/aes"
   "crypto/cipher"
   "crypto/md5"
   "database/sql"
   "fmt"
   _ "github.com/go-sql-driver/mysql"
)
  1. Tentukan dahulu fungsi untuk menjana kod md5 32-bit untuk menjana kunci.
func getMd5(value string) string {
   m := md5.New()
   m.Write([]byte(value))
   return hex.EncodeToString(m.Sum(nil))
}
  1. Tentukan fungsi untuk penyulitan AES.
func encrypt(str, key string) string {
   k := []byte(key)
   plaintext := []byte(str)
   block, _ := aes.NewCipher(k)
   ciphertext := make([]byte,len(plaintext))
   iv := []byte("1234567890123456")
   stream := cipher.NewCTR(block, iv)
   stream.XORKeyStream(ciphertext, plaintext)
   return string(ciphertext)
}
  1. Tentukan fungsi untuk penyahsulitan AES.
func decrypt(str, key string) string {
   k := []byte(key)
   ciphertext := []byte(str)
   block, _ := aes.NewCipher(k)
   plaintext := make([]byte,len(ciphertext))
   iv := []byte("1234567890123456")
   stream := cipher.NewCTR(block, iv)
   stream.XORKeyStream(plaintext, ciphertext)
   return string(plaintext)
}
  1. Panggil fungsi penyulitan dan simpan data yang disulitkan dalam pangkalan data.
func saveData(name, password, key string) error {

   // 打开数据库
   db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/test")
   if err != nil {
       return err
   }
   defer db.Close()

   // 定义插入SQL语句
   sql := "INSERT INTO user(name, password) VALUES(?, ?)"

   // 对密码进行加密存储
   pwd := encrypt(password, key)

   // 执行SQL语句
   stmt, err := db.Prepare(sql)
   if err != nil {
       return err
   }
   defer stmt.Close()

   _, err = stmt.Exec(name, pwd)
   return err
}
  1. Panggil fungsi nyahsulit dan baca data yang dinyahsulit.
func getData(name,key string) (string,error) {

   // 打开数据库
   db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/test")
   if err != nil {
       return "",err
   }
   defer db.Close()

   // 定义查询SQL语句
   sql := "SELECT password FROM user WHERE name = ?"

   // 执行SQL语句
   stmt, err := db.Prepare(sql)
   if err != nil {
       return "",err
   }
   defer stmt.Close()

   // 读取数据并进行解密
   var pwd string
   err = stmt.QueryRow(name).Scan(&pwd)
   if err != nil {
       return "",err
   }
   pwd = decrypt(pwd,key)
   return pwd,nil
}

Ringkasnya, melalui algoritma penyulitan golang di atas dan proses storan yang disulitkan, data sensitif dalam pangkalan data boleh disulitkan dan disimpan untuk memastikan keselamatan data, sambil menghalang kebocoran data secara berkesan dan meningkatkan kebolehpercayaan dan keselamatan data .

Atas ialah kandungan terperinci prosedur tersimpan yang disulitkan golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:golang slice to jsonArtikel seterusnya:golang slice to json