juechafun/05-原子化笔记本/Linux-openssl加密解密.md

124 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
#领域/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 ...
```