推荐使用AES-256-GCM模式,配合PBKDF2派生密钥、随机12字节nonce、文件权限0600及内存清零,实现机密性与完整性兼顾的安全加解密。
使用Golang实现AES加密与解密,核心在于正确选择模式(推荐AES-256-CBC或AES-256-GCM)、安全生成和管理密钥与初始化向量(IV),并严格遵循加解密流程。Golang标准库crypto/aes和crypto/cipher已提供完整支持,无需第三方依赖。
AES-256要求32字节密钥,IV长度必须为16字节(CBC/GCM模式)。切勿硬编码或复用IV——每次加密都应生成新随机IV。
crypto/rand.Read生成安全随机密钥和IVgolang.org/x/crypto/pbkdf2 + SHA256 + 至少10万次迭代CBC模式需填充(PKCS#7),适合一般文件加密,但不提供完整性校验,建议额外计算HMAC或改用GCM。
cipher.BlockMode不自动填充,需手动)block, _ := aes.NewCipher(key); mode := cipher.NewCBCEncrypter(block, iv); mode.CryptBlocks(ciphertext, plaintextPadded)
GCM同时提供机密性与完整性,无需单独填充或HMAC,是更现代、更安全的选择。
cipher.AEAD实例:aesgcm, _ := cipher.NewGCM(block)
aesgcm.Seal()加密:传入nonce、明文、附加数据(可为空),返回含认证标签的密文Open()
生产环境必须检查每一步的error,且避免明文/密钥残留内存。
os.OpenFile配合os.O_
CREATE | os.O_WRONLY写密文,设置文件权限为0600bytes.Fill([]byte{0})清空io.Copy配合自定义io.Reader加密wrapper)