在golang中使用AES256-GCM加密文件可以通过以下步骤实现:
import (
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"io"
"os"
)
key := make([]byte, 32)
if _, err := rand.Read(key); err != nil {
panic(err)
}
iv := make([]byte, 12)
if _, err := rand.Read(iv); err != nil {
panic(err)
}
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
gcm, err := cipher.NewGCM(block)
if err != nil {
panic(err)
}
file, err := os.Open("plaintext.txt")
if err != nil {
panic(err)
}
defer file.Close()
encryptedFile, err := os.Create("encrypted.txt")
if err != nil {
panic(err)
}
defer encryptedFile.Close()
nonce := make([]byte, gcm.NonceSize())
if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
panic(err)
}
if _, err := encryptedFile.Write(nonce); err != nil {
panic(err)
}
stream := cipher.NewCTR(block, nonce)
writer := &cipher.StreamWriter{S: stream, W: encryptedFile}
if _, err := io.Copy(writer, file); err != nil {
panic(err)
}
if err := writer.Close(); err != nil {
panic(err)
}
现在,文件已经使用AES256-GCM加密并保存在"encrypted.txt"中。
请注意,以上代码仅涵盖了文件加密的基本步骤,实际应用中可能需要处理更多的错误和异常情况。此外,为了完整性和安全性,还应该考虑密钥的存储和管理,以及对加密文件进行解密的过程。
推荐的腾讯云相关产品:腾讯云密钥管理系统(KMS)可以帮助您安全地存储和管理加密密钥。
参考链接:
领取专属 10元无门槛券
手把手带您无忧上云