Heim  >  Artikel  >  Backend-Entwicklung  >  Golang-verschlüsselte gespeicherte Prozedur

Golang-verschlüsselte gespeicherte Prozedur

WBOY
WBOYOriginal
2023-05-15 10:18:37605Durchsuche

Mit der rasanten Entwicklung des Internets haben Fragen der Informationssicherheit immer mehr Aufmerksamkeit auf sich gezogen. Dabei ist die Datensicherheit in der Datenbank äußerst wichtig. Daher ist es in praktischen Anwendungen sehr wichtig, die Daten in der Datenbank zu verschlüsseln. In diesem Artikel wird ein verschlüsselter Speicherprozess basierend auf Golang vorgestellt, um die Datensicherheit zu gewährleisten.

1. Golang-Verschlüsselungsalgorithmus

Golang bietet eine Vielzahl von Verschlüsselungsalgorithmen. Zu den gängigen Verschlüsselungsalgorithmen gehören hauptsächlich MD5, SHA, AES usw., die je nach Bedarf in tatsächlichen Anwendungen ausgewählt werden müssen. Im Folgenden sind gängige Golang-Verschlüsselungsalgorithmen aufgeführt.

  1. md5-Algorithmus

md5 ist einer der am häufigsten verwendeten Digest-Algorithmen. Da sein Code irreversibel ist, wird er häufig zur Passwortspeicherung verwendet. Dieser Algorithmus kann Nachrichten beliebiger Länge in Daten mit einer Länge von 128 Bit umwandeln, die normalerweise als hexadezimale Zeichenfolge dargestellt werden.

Das MD5-Paket wird in Golang bereitgestellt und kann über den folgenden Code verwendet werden:

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

sha ist eine Art sicherer Hashing-Algorithmus, der häufig in Standards für digitale Signaturen verwendet wird. Ähnlich wie bei MD5 gibt es viele Variationen von Sha, von denen Sha256 die häufigste ist. Es kann Nachrichten beliebiger Länge in Informationen mit einer Länge von 256 Bit umwandeln und gleichzeitig den Zweck erfüllen, Brute-Force-Kollisionsangriffen zu widerstehen.

Das sha256-Paket wird in Golang bereitgestellt und kann über den folgenden Code verwendet werden:

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

AES ist der Advanced Encryption Standard-Algorithmus und ein symmetrischer Verschlüsselungsalgorithmus. Es wandelt Klartext einer bestimmten Länge durch einen Algorithmus in Chiffretext einer bestimmten Länge um. Mit demselben Algorithmus kann der Chiffretext in Klartext wiederhergestellt werden. In Anwendungen kann die Speicherung sensibler Daten mit AES-Verschlüsselung die Datensicherheit erheblich verbessern.

Das crypto/aes-Paket wird in Golang bereitgestellt und kann über den folgenden Code verwendet werden:

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. Golang-verschlüsselter Speicherprozess

In tatsächlichen Anwendungen sollten die Daten in der Datenbank nicht direkt im Klartext gespeichert werden. Um den Verlust vertraulicher Informationen zu vermeiden, werden diese normalerweise verschlüsselt gespeichert. Das Folgende ist eine verschlüsselte gespeicherte Prozedur, die auf Golang basiert:

  1. Crypto/aes-, crypto/cipher-, crypto/md5-Pakete importieren.
import (
   "crypto/aes"
   "crypto/cipher"
   "crypto/md5"
   "database/sql"
   "fmt"
   _ "github.com/go-sql-driver/mysql"
)
  1. Definieren Sie zunächst eine Funktion zum Generieren eines 32-Bit-MD5-Codes, um einen Schlüssel zu generieren.
func getMd5(value string) string {
   m := md5.New()
   m.Write([]byte(value))
   return hex.EncodeToString(m.Sum(nil))
}
  1. Definieren Sie eine Funktion für die AES-Verschlüsselung.
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. Definieren Sie eine Funktion für die AES-Entschlüsselung.
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. Rufen Sie die Verschlüsselungsfunktion auf und speichern Sie die verschlüsselten Daten in der Datenbank.
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. Rufen Sie die Entschlüsselungsfunktion auf und lesen Sie die entschlüsselten Daten.
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
}

Zusammenfassend lässt sich sagen, dass durch den oben genannten Golang-Verschlüsselungsalgorithmus und den verschlüsselten Speicherprozess vertrauliche Daten in der Datenbank verschlüsselt und gespeichert werden können, um die Datensicherheit zu gewährleisten und gleichzeitig Datenlecks wirksam zu verhindern und die Datenzuverlässigkeit und -sicherheit zu verbessern.

Das obige ist der detaillierte Inhalt vonGolang-verschlüsselte gespeicherte Prozedur. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Golang-Slice zu JSONNächster Artikel:Golang-Slice zu JSON