一尘不染

如何使用公钥在openssl中加密大文件

linux

如何使用公共密钥加密大文件,以使只有拥有私有密钥的人才能解密该文件?

我可以使RSA公共和私有密钥生效,但是在使用以下命令加密大型文件时:

openssl rsautl -encrypt -pubin -inkey public.pem -in myLargeFile.xml -out myLargeFile_encrypted.xml

以及如何执行解密…

我通过以下命令创建我的私钥和公钥

openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -outform PEM -pubout

我收到此错误:

RSA operation error
3020:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:.\crypto\rsa\rsa_pk1.c:151:

我尝试制作大小从1024到1200位的键,没有运气,同样的错误


阅读 1157

收藏
2020-06-03

共2个答案

一尘不染

公钥加密不适用于对任意长文件进行加密。人们使用对称密码(例如AES)进行常规加密。每次生成,使用并使用RSA密码(公钥)加密新的随机对称密钥。密文与加密的对称密钥一起传输到接收者。接收者使用其私钥解密对称密钥,然后使用对称密钥解密消息。

私有密钥从不共享,只有公共密钥用于加密随机对称密码。

2020-06-03
一尘不染

安全和高度安全的解决方案,可以在OpenSSL和命令行中对任何文件进行编码:

您应该已经准备好一些X.509证书来加密PEM格式的文​​件。

加密文件:

openssl smime -encrypt -binary -aes-256-cbc -in plainfile.zip -out encrypted.zip.enc -outform DER yourSslCertificate.pem

什么是什么:

  • smime -S / MIME 实用程序的ssl命令(smime(1))
  • -encrypt-选择的文件处理方法
  • -binary-使用安全文件过程。通常,输入消息会按照S / MIME规范的要求转换为“规范”格式,此开关会将其禁用。所有二进制文件(例如图像,声音,ZIP存档)都是必需的。
  • -aes-256-cbc-选择用于加密的256位AES密码(强)。如果未指定,则使用40位RC2(非常弱)。(支持的密码)
  • -in plainfile.zip-输入文件名
  • -out crypto.zip.enc-输出文件名
  • -outform DER-将输出文件编码为二进制。如果未指定,则文件将由base64编码,并且文件大小将增加30%。
  • yourSslCertificate.pem- 证书的文件名。那应该是PEM格式。
    不管其格式如何,该命令都可以非常有效地对大文件进行强加密。
    已知问题: 尝试加密大文件(> 600MB)时发生错误。没有引发任何错误,但是加密的文件将被破坏。始终验证每个文件!(或使用PGP-对使用公钥的文件加密有更大的支持)

解密文件:

openssl smime -decrypt -binary -in encrypted.zip.enc -inform DER -out decrypted.zip -inkey private.key -passin pass:your_password

什么是什么:

-inform DER-与上面的-outform相同
-inkey private.key-私钥的文件名。该密码应为PEM格式,并可以使用密码进行加密。
-passin pass:your_password-您的私钥加密密码。(密码短语参数)

2020-06-08