您的位置:首页 >Golang如何在Linux中进行数据加密解密
发布于2026-04-24 阅读(0)
扫一扫,手机访问
在Linux环境下用Golang处理敏感数据,加密解密是绕不开的核心技能。好在Go的标准库已经为我们准备好了强大的工具,crypto和crypto/cipher这两个包用好了,安全通信和数据保护基本就稳了。今天,咱们就通过一个实战性很强的AES-GCM模式示例,把整个过程掰开揉碎了讲清楚。

先看代码全貌。下面这段示例清晰地展示了从加密到解密的完整闭环,关键步骤都加了注释,即使你之前没接触过加密,也能顺着逻辑看明白。
package main
import (
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"encoding/hex"
"fmt"
"io"
)
func main() {
key := []byte("your-secret-key") // 用于加密和解密的密钥,长度必须为16、24或32字节
plaintext := []byte("Hello, World!") // 需要加密的数据
// 加密
ciphertext, err := encrypt(key, plaintext)
if err != nil {
fmt.Println("Encryption error:", err)
return
}
fmt.Println("Encrypted data:", hex.EncodeToString(ciphertext))
// 解密
decrypted, err := decrypt(key, ciphertext)
if err != nil {
fmt.Println("Decryption error:", err)
return
}
fmt.Println("Decrypted data:", string(decrypted))
}
func encrypt(key, plaintext []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
aesGCM, err := cipher.NewGCM(block)
if err != nil {
return nil, err
}
nonce := make([]byte, aesGCM.NonceSize())
if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
return nil, err
}
ciphertext := aesGCM.Seal(nonce, nonce, plaintext, nil)
return ciphertext, nil
}
func decrypt(key, ciphertext []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
aesGCM, err := cipher.NewGCM(block)
if err != nil {
return nil, err
}
nonceSize := aesGCM.NonceSize()
if len(ciphertext) < nonceSize {
return nil, fmt.Errorf("ciphertext too short")
}
nonce, ciphertext := ciphertext[:nonceSize], ciphertext[nonceSize:]
plaintext, err := aesGCM.Open(nil, nonce, ciphertext, nil)
if err != nil {
return nil, err
}
return plaintext, nil
}
这段代码的逻辑其实非常清晰。简单来说,它选择了AES-GCM这种兼具加密和完整性验证的模式。整个过程就像一套标准动作:先根据密钥创建AES密码块,然后用GCM模式把它包装成一个更强大的加密器。加密的关键在于那个随机生成的nonce(一次性随机数),它和密钥一起,确保了同样的明文每次加密结果都不同。最后,加密输出的结果是一个“组合包”,里面包含了nonce和真正的密文。
解密则是这个过程的逆向操作。先从“组合包”里把nonce分离出来,然后用同样的密钥和这个nonce,去解锁密文部分,还原出原始数据。GCM模式的好处在这里就体现出来了,它能在解密时自动验证数据在传输过程中是否被篡改。
当然,有几个关键点必须划重点。第一,密钥管理是命门,示例中的硬编码密码只是为了演示,生产环境中必须通过安全的密钥管理系统来存储和获取。第二,错误处理需要更健壮,比如密钥长度校验、密文完整性检查等。第三,这个示例是基础教学,实际应用场景(如网络传输、文件加密)可能需要考虑更多的安全边界和性能优化。把这些记牢,你的加密解密之路就算入门了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9