openssl: 加密/解密一个txt文档

openssl 对一个 test.txt 加解密,帮我用shell命令实现?
更新于: 2024-04-15 10:10:59

几个概念

  • 初始向量IV: abcdef0123456789abcdef0123456789
  • 密钥Key(K): 0123456789abcdefabcdef0123456789123456789abcdefabcdef01234567891
# 注意长度: 
>>> len('abcdef0123456789abcdef0123456789') # 32
>>> len('0123456789abcdefabcdef0123456789123456789abcdefabcdef01234567891') # 64

准备 test.txt

用这个命令一键生成: echo "hello aric" > test.txt

hello aric

加密

openssl enc -aes-256-cbc -salt -in test.txt -out test.txt.enc -K 0123456789abcdefabcdef0123456789123456789abcdefabcdef01234567891 -iv abcdef0123456789abcdef0123456789

解密

openssl enc -aes-256-cbc -d -in test.txt.enc -out test.txt.dec -K 0123456789abcdefabcdef0123456789123456789abcdefabcdef01234567891 -iv abcdef0123456789abcdef0123456789

最终

~/Downloads via 🐠 v20.11.1 via 🐍 v3.10.0 
$ cat test.txt.dec 
hello aric

cheatsheet

当然,这是你需要的信息:

| 加密类型   | 密钥长度(字符) | 密钥长度(字节) | 初始化向量长度(字符) | 初始化向量长度(字节) |
|------------|--------------|--------------|---------------------|-------------------|
| AES-128-CBC |    32        |   16         |           32            |        16           |
| AES-256-CBC |    64        |   32         |           32            |        16           |

**备注:**
- "字符"指的是使用十六进制表示的字符数量,对于"字节",每个字节对应2个字符。
- 加密密钥和初始化向量都需要以十六进制字符串的形式提供,因此长度为 N 字节的密钥或 IV 将为 2N 个字符。
加密类型密钥长度(字符)密钥长度(字节)初始化向量长度(字符)初始化向量长度(字节) 
AES-128-CBC32163216
AES-256-CBC64323216

参考