Maison  >  Article  >  développement back-end  >  procédure stockée chiffrée Golang

procédure stockée chiffrée Golang

WBOY
WBOYoriginal
2023-05-15 10:18:37604parcourir

Avec le développement rapide d'Internet, les problèmes de sécurité de l'information attirent de plus en plus d'attention. Parmi eux, la sécurité des données dans la base de données est extrêmement importante. Par conséquent, dans les applications pratiques, il est indispensable de chiffrer les données de la base de données. Cet article présente un processus de stockage crypté basé sur Golang pour garantir la sécurité des données.

1. Algorithme de cryptage Golang

Golang fournit une variété d'algorithmes de cryptage. Les algorithmes de chiffrement courants incluent principalement md5, sha, AES, etc., qui doivent être sélectionnés en fonction des besoins des applications réelles. Voici les algorithmes de chiffrement Golang courants.

  1. algorithme md5

md5 est l'un des algorithmes de résumé les plus courants. Parce que son code est irréversible, il est souvent utilisé pour le stockage des mots de passe. Cet algorithme peut digérer des messages de n'importe quelle longueur en données de 128 bits, généralement représentées sous forme de chaîne hexadécimale.

Le package md5 est fourni en golang, qui peut être utilisé via le code suivant :

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

sha est un type d'algorithme de hachage sécurisé, couramment utilisé dans les normes de signature numérique. Semblable à md5, il existe de nombreuses variantes de sha, dont sha256 est la plus courante. Il peut digérer des messages de n'importe quelle longueur en informations de 256 bits, tout en atteignant l'objectif de résister aux attaques par collision par force brute.

Le package sha256 est fourni en golang, qui peut être utilisé via le code suivant :

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

AES est l'algorithme Advanced Encryption Standard et un algorithme de cryptage symétrique. Il convertit le texte brut d'une longueur spécifiée en texte chiffré d'une longueur spécifiée via un algorithme Grâce au même algorithme, le texte chiffré peut être restauré en texte brut. Dans les applications, le stockage de données sensibles avec le cryptage AES peut grandement améliorer la sécurité des données.

Le package crypto/aes est fourni en golang, qui peut être utilisé via le code suivant :

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. Processus de stockage crypté Golang

Dans les applications réelles, les données de la base de données ne doivent pas être directement enregistrées en texte brut. Afin d'éviter la fuite d'informations sensibles, stockez-les généralement cryptées. Ce qui suit est une procédure stockée cryptée basée sur Golang :

  1. Importez les packages crypto/aes, crypto/cipher, crypto/md5.
import (
   "crypto/aes"
   "crypto/cipher"
   "crypto/md5"
   "database/sql"
   "fmt"
   _ "github.com/go-sql-driver/mysql"
)
  1. Définissez d'abord une fonction permettant de générer un code md5 32 bits pour générer une clé.
func getMd5(value string) string {
   m := md5.New()
   m.Write([]byte(value))
   return hex.EncodeToString(m.Sum(nil))
}
  1. Définissez une fonction pour le cryptage 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. Définissez une fonction pour le décryptage 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. Appelez la fonction de cryptage et stockez les données cryptées dans la base de données.
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. Appelez la fonction de décryptage et lisez les données décryptées.
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
}

En résumé, grâce à l'algorithme de cryptage Golang ci-dessus et au processus de stockage crypté, les données sensibles de la base de données peuvent être cryptées et stockées pour garantir la sécurité des données, tout en empêchant efficacement les fuites de données et en améliorant la fiabilité et la sécurité des données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:tranche de golang en jsonArticle suivant:tranche de golang en json