应用 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