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.encexample.file.dec

openssl rsautl -decrypt -inkey rsa-private-key.pem -in example.file.enc > example.file.dec

你可能感兴趣的