我正在尝试使用OpenSSL的公钥加密来加密文件。我知道,对于任何合理大小的文件,这都不能/不应该使用公钥。代替:
1)生成随机密钥(例如256位)
2)使用公钥加密密钥
3)具有来自(1)例如AES
的随机密钥的对称加密文件4)加入(2)和(3)
5)发送(4)到任何地方/谁
此过程在OpenSSL的EVP例程中作为“信封加密”进行复制。我已经设法在C中使用这个API实现了一个解密/加密程序,工作正常:)
我想知道你是否可以直接通过OpenSSL命令而不是通过低级API来执行此过程。我已经尝试过并且可以生成随机密钥,加密文件等。然后我在加入这两个文件时卡住了 - 此刻我只是cat
两个在一起,但这似乎不起作用。这可能吗?
答案 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