您的位置:首页 >Linux Golang如何实现数据加密与解密
发布于2026-04-21 阅读(0)
扫一扫,手机访问
想在Linux环境下用Go语言搞定数据加密和解密?这事儿其实没想象中那么复杂。Go标准库里的crypto包已经为我们准备好了不少趁手的工具。今天,咱们就以最常用的对称加密算法AES(高级加密标准)为例,手把手走一遍完整的加密解密流程。下面的示例代码可以直接拿来用,但有几个关键点需要特别注意。

package main
import (
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"encoding/base64"
"fmt"
"io"
)
// 加密函数
func encrypt(plainText string, key []byte) (cipherText string, err error) {
// 创建一个AES块
block, err := aes.NewCipher(key)
if err != nil {
return "", err
}
// 生成随机IV
iv := make([]byte, aes.BlockSize)
if _, err := io.ReadFull(rand.Reader, iv); err != nil {
return "", err
}
// 创建一个cipher.BlockMode实例
mode := cipher.NewCBCEncrypter(block, iv)
// 填充明文
plainTextBytes := []byte(plainText)
padding := aes.BlockSize - len(plainTextBytes)%aes.BlockSize
padText := bytes.Repeat([]byte{byte(padding)}, padding)
plainTextBytes = append(plainTextBytes, padText...)
// 加密数据
cipherTextBytes := make([]byte, len(plainTextBytes))
mode.CryptBlocks(cipherTextBytes, plainTextBytes)
// 返回Base64编码的密文和IV
cipherText = base64.StdEncoding.EncodeToString(cipherTextBytes)
return cipherText, nil
}
// 解密函数
func decrypt(cipherText string, key []byte) (plainText string, err error) {
// 解码Base64密文
cipherTextBytes, err := base64.StdEncoding.DecodeString(cipherText)
if err != nil {
return "", err
}
// 创建一个AES块
block, err := aes.NewCipher(key)
if err != nil {
return "", err
}
// 创建一个cipher.BlockMode实例
iv := cipherTextBytes[:aes.BlockSize]
mode := cipher.NewCBCDecrypter(block, iv)
// 解密数据
plainTextBytes := make([]byte, len(cipherTextBytes)-aes.BlockSize)
mode.CryptBlocks(plainTextBytes, cipherTextBytes[aes.BlockSize:])
// 去除填充
padding := plainTextBytes[len(plainTextBytes)-1]
plainTextBytes = plainTextBytes[:len(plainTextBytes)-int(padding)]
// 返回明文
plainText = string(plainTextBytes)
return plainText, nil
}
func main() {
key := []byte("1234567890123456") // 16字节密钥
plainText := "Hello, World!"
// 加密
cipherText, err := encrypt(plainText, key)
if err != nil {
fmt.Println("加密失败:", err)
return
}
fmt.Println("加密后的密文:", cipherText)
// 解密
decryptedText, err := decrypt(cipherText, key)
if err != nil {
fmt.Println("解密失败:", err)
return
}
fmt.Println("解密后的明文:", decryptedText)
}
上面的代码虽然不长,但每一步都至关重要。我们来拆解一下:
加密函数 encrypt:
解密函数 decrypt:
代码跑起来不难,但要真正用在生产环境,有几个安全要点必须牢记:
总的来说,在Linux上用Go实现AES加密解密,核心就是理解块加密的原理、选对模式、并妥善处理密钥与IV。把上面这套流程搞明白,大部分对称加密的需求都能应对自如了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9