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
Libérer: 2023-08-01 13:15:23
original
1596 Les gens l'ont consulté

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
Copier après la connexion

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!")
}
Copier après la connexion

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)
}
Copier après la connexion

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)
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal