124 lines
3.2 KiB
Markdown
124 lines
3.2 KiB
Markdown
|
||
---
|
||
#领域/Linux
|
||
|
||
#复盘/0
|
||
|
||
## 一句话描述
|
||
|
||
[____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 ...
|
||
```
|