使用openssl EVP例程使用公钥加密文件

时间:2015-03-26 20:15:51

标签: cryptography openssl public-key-encryption

我正在尝试使用OpenSSL的公钥加密来加密文件。我知道,对于任何合理大小的文件,这都不能/不应该使用公钥。代替:

1)生成随机密钥(例如256位)

2)使用公钥加密密钥

3)具有来自(1)例如AES

的随机密钥的对称加密文件

4)加入(2)和(3)

5)发送(4)到任何地方/谁

此过程在OpenSSL的EVP例程中作为“信封加密”进行复制。我已经设法在C中使用这个API实现了一个解密/加密程序,工作正常:)

我想知道你是否可以直接通过OpenSSL命令而不是通过低级API来执行此过程。我已经尝试过并且可以生成随机密钥,加密文件等。然后我在加入这两个文件时卡住了 - 此刻我只是cat两个在一起,但这似乎不起作用。这可能吗?

3 个答案:

答案 0 :(得分:1)

好吧,您可以定义自己的容器格式,但just use CMS可能更容易处理该用例。

答案 1 :(得分:1)

我对openssl的经验几近为零,但是在联机帮助页之后,我会这样做:

1)生成随机密钥(例如256位= 32字节)

openssl rand -out key 32

2)生成一个pubkey privkey密钥对(出于测试目的,实际上,你只是拥有其他人的密钥对的pub部分)

openssl genrsa > key.pem

3)提取公共部分

openssl rsa -in key.pem  -pubout  > key.pub

4)使用公钥加密密钥(AES的随机密钥)

openssl rsautl -in key -out ekey -pubin -inkey key.pub -encrypt -raw

5)确认ekey解密为密钥

  openssl rsautl -in ekey -out KEY -inkey key.pem -decrypt -raw
  cmp KEY key && echo yes

6)使用来自(1)例如AES

的随机密钥对文件进行对称加密
openssl enc  -aes-256-ecb -kfile key -in file -out efile

至于使用efile加入ekey,我不知道常用的格式。您可以将这两个文件放在存档中。

答案 2 :(得分:0)

修正:

openssl cms -encrypt -in infile -out outfile -outform DER -binary cert.crt