Maison >développement back-end >Golang >Apprenez les fonctions de chiffrement et de décryptage en langage Go et implémentez des algorithmes de chiffrement asymétriques

Apprenez les fonctions de chiffrement et de décryptage en langage Go et implémentez des algorithmes de chiffrement asymétriques

WBOY
WBOYoriginal
2023-08-01 13:15:231634parcourir

Apprenez les fonctions de cryptage et de déchiffrement du langage Go et implémentez des algorithmes de cryptage asymétriques

À l'ère de l'information moderne, la sécurité des données est devenue particulièrement importante. Pour protéger les données sensibles des pirates et des visiteurs illégaux, les algorithmes de cryptage sont largement utilisés. Parmi eux, les algorithmes de chiffrement asymétriques sont populaires en raison de leur haute sécurité. Le langage Go est un langage de programmation puissant et concis qui nous offre une multitude de fonctions de cryptage et de décryptage pour assurer la sécurité des données.

Cet article présentera l'apprentissage des fonctions de cryptage et de déchiffrement en langage Go, et démontrera comment implémenter des algorithmes de cryptage asymétriques à travers des exemples. Nous utiliserons l'algorithme RSA comme exemple pour montrer comment générer des clés publiques et privées et comment les utiliser pour le cryptage et le déchiffrement.

Tout d'abord, nous devons installer le langage Go et la bibliothèque RSA. Après avoir installé le langage Go, vous pouvez utiliser la commande suivante pour installer la bibliothèque RSA :

go get -u github.com/golang/crypto

Une fois l'installation terminée, nous pouvons commencer à écrire du code. Tout d’abord, nous allons générer une paire de clés publique et privée. Notez que la clé privée est utilisée pour déchiffrer les données, tandis que la clé publique est utilisée pour chiffrer les données. Voici un exemple de code pour générer des clés publiques et privées :

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!")
}

Après avoir exécuté le code ci-dessus, deux fichiers seront générés : "private.key" et "public.key". Ces deux fichiers enregistrent respectivement la clé privée et la clé publique. Il est très important d'assurer la sécurité de la clé privée, c'est pourquoi le fichier de clé privée doit être correctement conservé dans les applications pratiques.

Ensuite, nous écrirons un exemple de code pour le cryptage et le déchiffrement. Voici un exemple de cryptage utilisant la clé publique générée :

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)
}

Après avoir exécuté le code ci-dessus, le texte chiffré sera affiché.

Enfin, écrivons un exemple de décryptage. Voici l'exemple de code pour déchiffrer le texte chiffré à l'aide de la clé privée :

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)
}

Dans le code ci-dessus, nous lisons la clé privée du fichier et utilisons cette clé privée pour déchiffrer le texte chiffré. Enfin, nous obtiendrons les données originales en texte brut.

Grâce à l'exemple de code ci-dessus, nous pouvons apprendre les fonctions de cryptage et de décryptage en langage Go et implémenter avec succès l'algorithme de cryptage asymétrique. La protection de la sécurité des données est la responsabilité de chaque programmeur. Grâce aux fonctions puissantes et aux fonctions de bibliothèque du langage Go, nous pouvons facilement mettre en œuvre le cryptage et le décryptage des données, ajoutant ainsi une sécurité accrue à nos applications. J'espère que cet article vous sera utile pour apprendre les fonctions de cryptage et de décryptage et les algorithmes de cryptage asymétriques.

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