openssl|openssl 使用混合加密方法,对大文件加解密

使用 openssl
背景
RSA 和 AES 分别是经典的非对称加密算法和对称加密算法。但是非对称加密算法并不适合处理大文件,所以大家一般都会采用混合加密的方式,即:
  1. 生成对称加密算法所需要的对称密码
  2. 使用对称加密算法加密大文件
  3. 使用非对称加密算法加密对称密码
方法
加密
  1. 创建 AES 所需的 keyiv,用一个文本文件存储起来
  2. 使用这个 keyiv 加密大文件
  3. 创建 RSA 所需的公私钥对
  4. 使用 RSA 公钥加密存储 keyiv 的文本文件
  5. 将加密后的大文件和加密后的存储 keyiv 的文本文件放在一起,便于以后解密
解密
  1. 使用 RSA 私钥解密加密后的存储 keyiv 的文本文件
  2. 读取 keyiv
  3. 使用 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|openssl 使用混合加密方法,对大文件加解密】openssl rsautl -decrypt -inkey rsa-private-key.pem -in example.file.enc > example.file.dec

    推荐阅读