千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:郑州千锋IT培训  >  技术干货  >  Golang中的加密与解密技术

Golang中的加密与解密技术

来源:千锋教育
发布人:xqq
时间: 2023-12-23 20:12:39

Golang中的加密与解密技术

在当今信息化时代,数据安全是一个非常重要的问题。为了保护敏感数据不被黑客和其他恶意用户访问,必须采取适当的加密和解密技术。Golang是现今最流行的编程语言之一,因此,本文将为您介绍Golang中的加密和解密技术。

1. 对称加密

对称加密是一种加密方法,它使用相同的密钥来加密和解密数据。Golang中的对称加密算法包括DES、3DES、AES等。下面是一个使用AES-256加密字符串的示例程序:

`go

package main

import (

"crypto/aes"

"crypto/cipher"

"crypto/rand"

"encoding/base64"

"io"

"log"

)

func encrypt(key byte, text byte) (string, error) {

block, err := aes.NewCipher(key)

if err != nil {

return "", err

}

b := base64.StdEncoding.EncodeToString(text)

ciphertext := make(byte, aes.BlockSize+len(b))

iv := ciphertext

if _, err := io.ReadFull(rand.Reader, iv); err != nil {

return "", err

}

cfb := cipher.NewCFBEncrypter(block, iv)

cfb.XORKeyStream(ciphertext, byte(b))

return base64.StdEncoding.EncodeToString(ciphertext), nil

}

func decrypt(key byte, text string) (string, error) {

block, err := aes.NewCipher(key)

if err != nil {

return "", err

}

ciphertext, err := base64.StdEncoding.DecodeString(text)

if err != nil {

return "", err

}

iv := ciphertext

ciphertext = ciphertext

cfb := cipher.NewCFBDecrypter(block, iv)

cfb.XORKeyStream(ciphertext, ciphertext)

data, err := base64.StdEncoding.DecodeString(string(ciphertext))

if err != nil {

return "", err

}

return string(data), nil

}

func main() {

key := byte("12345678901234567890123456789012")

text := byte("Hello, World!")

encrypted, err := encrypt(key, text)

if err != nil {

log.Fatal(err)

}

log.Println("Encrypted:", encrypted)

decrypted, err := decrypt(key, encrypted)

if err != nil {

log.Fatal(err)

}

log.Println("Decrypted:", decrypted)

}

2. 非对称加密非对称加密是一种加密方法,它使用一对密钥来加密和解密数据。其中一个密钥用于加密数据,另一个密钥用于解密数据。Golang中的非对称加密算法包括RSA、DSA等。下面是一个使用RSA加密文本文件的示例程序:`gopackage mainimport (    "bufio"    "crypto/rand"    "crypto/rsa"    "crypto/x509"    "encoding/pem"    "fmt"    "log"    "os")func generateKeys() (*rsa.PrivateKey, error) {    privateKey, err := rsa.GenerateKey(rand.Reader, 2048)    if err != nil {        return nil, err    }    return privateKey, nil}func encrypt(publicKey *rsa.PublicKey, message byte) (byte, error) {    ciphertext, err := rsa.EncryptPKCS1v15(rand.Reader, publicKey, message)    if err != nil {        return nil, err    }    return ciphertext, nil}func decrypt(privateKey *rsa.PrivateKey, ciphertext byte) (byte, error) {    message, err := rsa.DecryptPKCS1v15(rand.Reader, privateKey, ciphertext)    if err != nil {        return nil, err    }    return message, nil}func pemEncodePrivateKey(privateKey *rsa.PrivateKey) (byte, error) {    privateKeyBytes := x509.MarshalPKCS1PrivateKey(privateKey)    privateKeyPEMBlock := &pem.Block{        Type:  "RSA PRIVATE KEY",        Bytes: privateKeyBytes,    }    return pem.EncodeToMemory(privateKeyPEMBlock), nil}func pemEncodePublicKey(publicKey *rsa.PublicKey) (byte, error) {    publicKeyBytes, err := x509.MarshalPKIXPublicKey(publicKey)    if err != nil {        return nil, err    }    publicKeyPEMBlock := &pem.Block{        Type:  "RSA PUBLIC KEY",        Bytes: publicKeyBytes,    }    return pem.EncodeToMemory(publicKeyPEMBlock), nil}func main() {    privateKey, err := generateKeys()    if err != nil {        log.Fatal(err)    }    publicKey := &privateKey.PublicKey    privateKeyPEM, err := pemEncodePrivateKey(privateKey)    if err != nil {        log.Fatal(err)    }    publicKeyPEM, err := pemEncodePublicKey(publicKey)    if err != nil {        log.Fatal(err)    }    log.Println("*** Private Key ***")    log.Println(string(privateKeyPEM))    log.Println("*** Public Key ***")    log.Println(string(publicKeyPEM))    plaintextFile, err := os.Open("plaintext.txt")    if err != nil {        log.Fatal(err)    }    defer plaintextFile.Close()    ciphertextFile, err := os.Create("ciphertext.txt")    if err != nil {        log.Fatal(err)    }    defer ciphertextFile.Close()    scanner := bufio.NewScanner(plaintextFile)    for scanner.Scan() {        message := scanner.Bytes()        ciphertext, err := encrypt(publicKey, message)        if err != nil {            log.Fatal(err)        }        ciphertextFile.Write(ciphertext)        ciphertextFile.WriteString("\n")    }    if err := scanner.Err(); err != nil {        log.Fatal(err)    }}

总结

本文介绍了Golang中的加密和解密技术。对称加密使用相同的密钥来加密和解密数据,非对称加密使用一对密钥来加密和解密数据。我们还提供了使用AES和RSA加密和解密数据的示例程序。在使用加密和解密技术时,请务必小心处理密钥以及敏感数据,并确保加密和解密算法是安全和适当的。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

如何搭建防火墙提高网络安全性

2023-12-23

全面掌握GoLand的调试功能

2023-12-23

Goland代码分析工具的使用

2023-12-23

最新文章NEW

Golang神器之完整使用指南

2023-12-23

通过配置Nginx提高网站性能

2023-12-22

云计算的未来AI和混合云的融合

2023-12-22

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>