共计 1377 个字符,预计需要花费 4 分钟才能阅读完成。
应用 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