
---
#领域/Linux 

#复盘/1

## 一句话描述

[____openssl AES-256-CBC加密解密____]

---

## 核心规范

>空想不如行动，积累胜于苛求。
>实践 > 沉淀 > 完美主义

实践不是盲目行动，而是带着“小目标、可验证“的方向试错，实践后必须沉淀（比如记录问题、总结规律），否则就是低水平重复。

实践大于沉淀，沉淀大于完美；完美是沉淀的终局方向，沉淀是实践的复盘产物；分域施策，避坑落地，始于行动，终于迭代。

---

## 三省沉淀法

- 达成了[_文件加密解密_______]目标
- 遇到了[__命令频繁输入、加密算法繁多______]问题
- 下次改进[_将常用加解密封装为脚本，先主要采用一种算法_______]

## 个人理解

[_对文件进行加解密_______]

## 实践计划

#状态/待实践

1. [__编写加解密脚本______]
2. [________]
3. [________]

---

## 核心定义

openssl AES-256-CBC 对称加密，加解密用同一个密码
文件加密主流（速度快、适合大文件/多文件)，256位密钥几乎无法暴力破解

| 参数            | 作用                            |
| ------------- | ----------------------------- |
| -aes-256-cbc  | 指定加密算法                        |
| -e            | 解密模式                          |
| -d            | 加密模式                          |
| -salt         | 加盐加密（让相同密码生成不同的密文，提升安全性）      |
| -pbkdf2       | 密钥派生算法（普通密码转为高强度密钥，openssl推荐） |
| -pass pass:密码 | 直接指定明文密码                      |
| -in 文件名       | 指定输入文件                        |
| -out 文件名      | 指定输出文件                        |
加密时加了 -pbkdf2 和 -salt，解密时必须加 -pbkdf2，无需加 -salt

### 示例

#### ✅ 批量压缩加密

```bash
# tar czvf - 中的 - 会输出到管道
tar czvf - maixapp-cache/ | openssl enc -aes-256-cbc -salt -pbkdf2 -pass pass:123456 -out out.tar.gz.enc
```

#### ✅ 批量解压解密

```bash
# tar czvf - 中的 - 会输出到管道
openssl enc -d -aes-256-cbc -in out.tar.gz.enc -pbkdf2 -pass pass:123456 | tar zxvf -
```

### 避坑点

⚠️ 避坑点1：解密时 tar 参数不匹配，导致解密失败/文件损坏
    解决方案：加解密之前明确一下 tar 解压缩是否正常

⚠️ 避坑点2：加密时忘加 -salt，导致密码安全性较低
    解决方案：加密必加-salt，解密无需加

### 进阶

#### 机密后校验文件完整性

```bash
# 加密后生成校验值
md5sum out.tar.gz.enc > output.tar.gz.enc.md5
# 解密前校验（无输出则校验通过，有输出则文件损坏）
md5sum -c out.tar.gz.enc.md5
```

#### 大文件加解密后台执行

```
nohup tar czvf - test.dat | openssl enc -aes-256-cbc -salt -pbkdf2 -out out.tar.gz.enc > encrypt.log 2>&1 &

ps -ef | grep openssl
```

#### 编写自动化脚本，避免重复输命令

```bash

#!/bin/bash

if [ $1 = "encrypt" ]; then
    加密命令
    tar ... $2 | open ... -pass pass:$3 -out $4
elif [ $1 = "decrypt" ]; then
    解密命令
    openssl ... -in $2 ...
else
    使用说明: ./run.sh [encrypt/decrypt] 目标 密码 加密文件
```

```bash
chmod +x run.sh
./run ...
```
