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

CodeCosmicRover
• 阅读 2570
使用 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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Easter79 Easter79
3年前
sqlcipher 移植
sqlcipher简介  SQLCipher是一个对sqlite数据库进行aes256加密的开源库,提供透明,安全的256位AES加密的SQLite数据库文件,项目本身不提供加密算法,调用openssl的aes加密算法  SQLCipher的社区版的源代码是一个BSD风格的开源许可下发布,但是官方提供的二进制库需要购买
Wesley13 Wesley13
3年前
SSH加密原理、RSA非对称加密算法学习与理解
   首先声明一下,这里所说的SSH,并不是Java传统的三大框架,而是一种建立在应用层和传输层基础上的安全外壳协议,熟悉Linux的朋友经常使用到一个SSHSecureShellCilent的工具,本文也是基于此工具加密原理的学习,在SSH的加密原理中,使用到了RSA非对称加密算法,本文也一并做了学习和了解。  非对称加密算法
Wesley13 Wesley13
3年前
RSA加密、解密、签名、验签的原理及方法
一、RSA加密简介  RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。
Wesley13 Wesley13
3年前
java实现非对称加密
对称加密:加密和解密的过程使用的是相同的密钥!这里写图片描述(https://oscimg.oschina.net/oscnet/42e81282a912d5abcf561e846c2b997914e.png)非对称加密与对称加密不同,非对称加密算法的加密和解密使用不同的两个密钥.这两个密钥就是我们经常听到的”公开密钥”(公钥
Wesley13 Wesley13
3年前
RSA —— 典型非对称加密算法
RSA——JAVA代码(toc_0)RSA——加密过程图解(toc_1)(图1)构建RSA算法密匙对(toc_2)(图2)甲方向乙方发送RSA加密数据(toc_3)(图3)乙方向甲方发送RSA加密数据(toc_4)RSA——简述(
Stella981 Stella981
3年前
OpenSSL和Python实现RSA Key公钥加密私钥解密
基于非对称算法的RSAKey主要有两个用途,数字签名和验证(私钥签名,公钥验证),以及非对称加解密(公钥加密,私钥解密)。本文提供一个基于OpenSSL和Python进行非对称加解密的例子。1\.OpenSSL实现非对称加解密1.1生成私钥,并导出公钥生成2048bit的PEM格式的RSAKey:Key.pem$openssl
Stella981 Stella981
3年前
Openssl生成RSA公私钥以及将公钥转换成C#支持的格式
Openssl生成RSA公私钥以及将公钥转换成C支持的格式1.RSA算法介绍RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。RSA的算法涉及三个参数,n、e、d。其中,n是两个大质数p、q的积,n被称为模数,n的二进
Wesley13 Wesley13
3年前
JAVA_RSA_的加解密
RSA为非对称加密算法。数字签名的过程:1、对明文数据进行HASH加密,不可逆;2、对加密后的数据再用RSA的私钥进行二次加密。数字签名的验证过程:1、对明文数据进行HASH加密,不可逆;2、用RSA的公钥对数字签名后的数据进行解密;3、把1的结果和2的结果进行比较是否相等。RSA加密的过程和解密的过程都需要三步:加/解密、分组、填充。这三部分每
CodeCosmicRover
CodeCosmicRover
Lv1
梅须逊雪三分白,雪却输梅一段香。
文章
5
粉丝
0
获赞
0