答案:基于AES-256-CBC模式使用crypto/aes和crypto/cipher库实现文件加解密,需生成随机IV并采用PKCS7填充,加密时将IV写入文件头,解密时先读取IV并用相同密钥解密,注意密钥安全与IV唯一性。

在实际开发中,有时需要对敏感文件进行加密存储或传输。Golang 提供了强大的标准库支持,如 crypto/aes、crypto/cipher 和 crypto/rand,可以方便地实现文件的加解密功能。下面介绍一种基于 AES-256-CBC 模式的简单文件加解密实践。
选择加密模式与算法
AES(高级加密标准)是目前最常用的对称加密算法之一。AES 支持 128、192 和 256 位密钥长度,安全性高。我们选择 AES-256-CBC 模式,其中 CBC(Cipher Block Chaining)需要初始化向量(IV)来增强安全性。
注意:CBC 模式要求数据长度为块大小的整数倍(AES 块大小为 16 字节),需进行填充(常用 PKCS7 填充)。
生成密钥与 IV
密钥应由用户安全提供或通过密钥派生函数(如 PBKDF2)生成。IV 不需要保密,但必须随机且唯一。每次加密使用不同的 IV 可防止相同明文生成相同密文。
立即学习“go语言免费学习笔记(深入)”;
建议:IV 随加密数据一起保存,通常放在密文头部。示例代码片段:
- 使用 crypto/rand 生成安全随机 IV
- 密钥可通过 SHA256 等哈希方式从密码派生(仅作演示,生产环境推荐 PBKDF2)
加密文件流程
读取明文文件,分块加密并写入输出文件。结构如下:
- 生成 16 字节随机 IV
- 将 IV 写入输出文件开头
- 使用 AES-CBC 加密每一块数据
- 对最后一块执行 PKCS7 填充
- 写入加密后的密文块
加密完成后,输出文件前 16 字节为 IV,后续为密文。
解密文件流程
读取加密文件,先提取 IV,再解密内容:
- 读取前 16 字节作为 IV
- 使用相同密钥初始化 AES 解密器
- 逐块解密数据
- 移除 PKCS7 填充以恢复原始数据
- 写入解密后的明文文件
若密钥或 IV 错误,解密结果将乱码或失败。
基本上就这些。核心在于正确使用加密模式、安全处理 IV 和填充。虽然实现不复杂,但细节容易出错,比如忘记填充或 IV 复用会降低安全性。对于生产环境,建议结合更完善的密钥管理机制。










