openssl enc 是什么
openssl enc 提供文件级的对称加解密,常见用法是 AES-256-CBC 配 PBKDF2 做口令派生。算法、模式、迭代次数、盐值与初始化向量都由参数决定或隐含在密文头部,因此解密时必须使用完全一致的算法、迭代次数与口令来源才能还原。它的定位是文件加解密与格式转换的顺手工具,而不是应用侧数据加密的组件。
基本信息
| 加密 | openssl enc -aes-256-cbc -pbkdf2 -iter 600000 -in f -out f.enc |
|---|---|
| 解密 | 加 -d,算法与迭代次数必须与加密时完全一致 |
| 口令来源 | -pass env:VAR 或 file:path,避免写在命令参数里 |
| 盐值 | 默认启用 -salt,不要关闭 |
| AEAD 局限 | enc 对 GCM 等模式的附加数据支持有限,生产数据加密建议使用专门的加密库 |
典型使用场景
- 备份文件加密:一次加密、长期保存,参数与口令必须一起登记
- 日志与会话记录的归档保护
- 运维交接场景:临时加密配置文件再通过安全通道传递
- 验证解密回路是否可用:加密后解密并与原文比对
- 复盘「密文在、参数忘」这类事故,明确参数记录机制
加密解密回路验证
加密解密回路验证
export FGPASS=... # 从受控位置注入,不要写进脚本明文
openssl enc -aes-256-cbc -pbkdf2 -iter 600000 -salt -pass env:FGPASS -in data.tar -out data.tar.enc
openssl enc -d -aes-256-cbc -pbkdf2 -iter 600000 -pass env:FGPASS -in data.tar.enc -out data.tar.verify
cmp data.tar data.tar.verify && echo 'decrypt ok' # 回路校验
head -c 16 data.tar.enc | xxd # 前 8 字节为 Salted__ 标记参数必须一致
| 参数 | 作用 | 不一致的后果 |
|---|---|---|
| 算法与模式 | 决定分组与填充方式 | 报错或输出错误数据 |
| -iter 迭代次数 | PBKDF2 派生强度 | 派生口令不同,解密失败 |
| -salt | 抗预计算与彩虹表 | 无法还原原始密钥 |
| -pass 来源 | 口令获取方式 | 口令不同或读取失败 |
参数记录建议:把算法、迭代次数、盐值策略与口令存放位置写进运维文档,并随密文一起登记。密文完好但没人记得参数,是这类工具最典型的翻车方式。迭代次数选择要兼顾安全与耗时,备份场景下每次都要能跑完。