推荐使用AES-GCM加密模式,结合PBKDF2派生密钥、随机salt与nonce,按salt(16)+nonce(12)+ciphertext+tag格式封装文件,流式处理大文件并严格校验错误。
用 Golang 实现一个轻量、安全、易用的文件加密解密工具并不难,关键是选对算法、管好密钥、处理好 I/O 和错误。推荐使用 AES-GCM(带认证的对称加密),它同时提供机密性与完整性,且 Go 标准库 crypto/aes 和 crypto/cipher 原生支持。
AES-GCM 是目前主流推荐的加密方式:速度快、抗篡改、无需额外 HMAC 计算。Go 中通过 cipher.NewGCM 构建加解密器,注意必须使用唯一且不可预测的 nonce(通常随机生成 12 字节)。
不要把用户输入的密码直接当 AES 密钥。用 golang.org/x/crypto/pbkdf2 或 scrypt 增加暴力破解成本:
pbkdf2.Key([]byte(password), salt, 100000, 32, sha256.New)
加密时:读取原文 → 生成 salt + nonce → 派生密钥 → AES-GCM 加密 → 拼接 salt|nonce|ciphertext|tag 写入新文件。
解密时:读取前段提取 salt/nonce → 派生密钥 → GCM 解密 → 校验 tag → 写出明文。
io.Pipe 或分块读写),避免内存爆炸error,尤其解密失败时返回明确提示(如“
密钥错误或文件损坏”)用 flag 或 spf13/cobra 实现简单 CLI,例如:tool encrypt -in config.json -out config.enc -pass "mypassword"。
golang.org/x/term.ReadPassword 隐藏输入