使用 openssl
背景
RSA 和 AES 分别是经典的非对称加密算法和对称加密算法。但是非对称加密算法并不适合处理大文件,所以大家一般都会采用混合加密的方式,即:
- 生成对称加密算法所需要的对称密码
- 使用对称加密算法加密大文件
- 使用非对称加密算法加密对称密码
方法
加密
- 创建 AES 所需的
key
和iv
,用一个文本文件存储起来 - 使用这个
key
和iv
加密大文件 - 创建 RSA 所需的公私钥对
- 使用 RSA 公钥加密存储
key
和iv
的文本文件 - 将加密后的大文件和加密后的存储
key
和iv
的文本文件放在一起,便于以后解密
解密
- 使用 RSA 私钥解密加密后的存储
key
和iv
的文本文件 - 读取
key
和iv
- 使用 AES 解密大文件
命令
请按实际需要,修改命令中的各个文件名
生成随机十六进制数字
密码:长度 32
openssl rand -hex 32
初始向量 iv:长度 16
openssl rand -hex 16
生成后,写入到一个文本文件中,待之后被 RSA 加密
readonly key=$(openssl rand -hex 32)
readonly iv=$(openssl rand -hex 16)
readonly aes_key_and_iv_file="aes-key-and-iv.txt"
{
echo "key=${key}"
echo "iv=${iv}"
} > "${aes_key_and_iv_file}"
AES 加密
记得使用生成的 key 和 iv,替换命令中的 32nums(hexdec) 和 16nums(hexdex)
openssl enc -aes-256-cbc -in example.file -out example.file.enc -base64 -K 32nums(hexdec) -iv 16nums(hexdec)
AES 解密
记得使用密码文件中的 key 和 iv,替换命令中的 32nums(hexdec) 和 16nums(hexdex)
openssl enc -aes-256-cbc -d -in example.file.enc -base64 -out example.file.dec -K 32nums(hexdec) -iv 16nums(hexdec)
创建 RSA 私钥
生成私钥并写入到文件 rsa-private-key.pem,私钥长度为 4096 numbits
openssl genrsa -out rsa-private-key.pem 4096
创建 RSA 公钥
根据私钥 rsa-private-key.pem 生成公钥,并写入到文件 rsa-public-key.pem
openssl rsa -in rsa-private-key.pem -pubout -out rsa-public-key.pem
RSA 加密
使用公钥 rsa-public-key.pem 加密文件 example.file 后生成 example.file.enc
openssl rsautl -encrypt -inkey rsa-public-key.pem -pubin -in example.file -out example.file.enc
RSA 解密
使用私钥 rsa-private-key.pem 解密文件 example.file.enc 为 example.file.dec
openssl rsautl -decrypt -inkey rsa-private-key.pem -in example.file.enc > example.file.dec
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。