如何使用公钥加密大文件,以便除了拥有私钥的人之外没有人能够解密它?
我可以制作RSA公钥和私钥,但是在使用此命令加密大文件时:
openssl rsautl -encrypt -pubin -inkey public.pem -in myLargeFile.xml -out myLargeFile_encrypted.xml
Run Code Online (Sandbox Code Playgroud)
我怎样才能执行解密....
我通过以下命令创建我的私钥和公钥
openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -outform PEM -pubout
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
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:
Run Code Online (Sandbox Code Playgroud)
我试图制作大小从1024到1200位的密钥,没有运气,同样的错误
n. *_* m. 76
公钥加密不是用于加密任意长文件.一个使用对称密码(比如AES)来进行常规加密.每次生成,使用新随机对称密钥,然后使用RSA密码(公钥)加密.密文与加密的对称密钥一起被传送给接收者.接收方使用其私钥解密对称密钥,然后使用对称密钥解密消息.
私钥永远不会被共享,只有公钥用于加密随机对称密码.
Jak*_*cek 69
安全和高度安全的解决方案在OpenSSL和命令行中编码任何文件:
您应该为PEM格式的加密文件准备好一些X.509证书.
加密文件:
openssl smime -encrypt -binary -aes-256-cbc -in plainfile.zip -out encrypted.zip.enc -outform DER yourSslCertificate.pem
Run Code Online (Sandbox Code Playgroud)
什么是什么:
无论格式如何,该命令都可以非常有效地加密大文件.
已知问题:
当您尝试加密大文件(> 600MB)时会发生错误.没有抛出错误,但加密文件将被破坏.始终验证每个文件!(或使用PGP - 对公钥加密的文件加密更大)
解密文件:
openssl smime -decrypt -binary -in encrypted.zip.enc -inform DER -out decrypted.zip -inkey private.key -passin pass:your_password
Run Code Online (Sandbox Code Playgroud)
什么是什么:
Has*_*kun 30
您无法使用直接加密大文件rsautl.相反,做类似以下的事情:
openssl rand例如生成密钥.openssl rand 32 -out keyfileopenssl rsautlopenssl enc步骤1中生成的密钥加密数据.Ips*_*tch 22
不建议使用smime加密非常大的文件,因为您可以使用-stream选项加密大文件,但由于硬件限制而无法解密生成的文件, 请参阅:解密大文件的问题
如上所述,公钥加密不是用于加密任意长文件.因此,以下命令将生成密码短语,使用对称加密对文件进行加密,然后使用非对称(公钥)加密密码短语.注意:smime包括使用主公钥和备份密钥来加密密码短语.备份公钥/私钥对是谨慎的.
将RANDFILE值设置为当前用户可访问的文件,生成passwd.txt文件并清除设置
export OLD_RANDFILE=$RANDFILE
RANDFILE=~/rand1
openssl rand -base64 2048 > passwd.txt
rm ~/rand1
export RANDFILE=$OLD_RANDFILE
Run Code Online (Sandbox Code Playgroud)
使用以下命令使用passwd.txt内容作为密码加密文件,使用AES256加密到base64(-a选项)文件.使用非主题加密将passwd.txt加密到文件XXLarge.crypt.pass中,使用主公钥和备份密钥.
openssl enc -aes-256-cbc -a -salt -in XXLarge.data -out XXLarge.crypt -pass file:passwd.txt
openssl smime -encrypt -binary -in passwd.txt -out XXLarge.crypt.pass -aes256 PublicKey1.pem PublicBackupKey.pem
rm passwd.txt
Run Code Online (Sandbox Code Playgroud)
解密只需将XXLarge.crypt.pass解密为passwd.tmp,将XXLarge.crypt解密为XXLarge2.data,并删除passwd.tmp文件.
openssl smime -decrypt -binary -in XXLarge.crypt.pass -out passwd.tmp -aes256 -recip PublicKey1.pem -inkey PublicKey1.key
openssl enc -d -aes-256-cbc -a -in XXLarge.crypt -out XXLarge2.data -pass file:passwd.tmp
rm passwd.tmp
Run Code Online (Sandbox Code Playgroud)
这已针对> 5GB文件进行了测试..
5365295400 Nov 17 10:07 XXLarge.data
7265504220 Nov 17 10:03 XXLarge.crypt
5673 Nov 17 10:03 XXLarge.crypt.pass
5365295400 Nov 17 10:07 XXLarge2.data
Run Code Online (Sandbox Code Playgroud)
Tom*_*eba 18
我发现http://www.czeskis.com/random/openssl-encrypt-file.html上的说明很有用.
要使用示例中的文件名来解释链接的网站:
生成对称密钥,因为您可以使用它加密大型文件
Run Code Online (Sandbox Code Playgroud)openssl rand -base64 32 > key.bin使用对称密钥加密大文件
Run Code Online (Sandbox Code Playgroud)openssl enc -aes-256-cbc -salt -in myLargeFile.xml \ -out myLargeFile.xml.enc -pass file:./key.bin加密对称密钥,以便您可以安全地将其发送给其他人
Run Code Online (Sandbox Code Playgroud)openssl rsautl -encrypt -inkey public.pem -pubin -in key.bin -out key.bin.enc销毁未加密的对称密钥,以便没人找到它
Run Code Online (Sandbox Code Playgroud)shred -u key.bin此时,您将加密的对称密钥(
key.bin.enc)和加密的大文件(myLargeFile.xml.enc)发送给其他人然后,另一个人可以使用其私钥解密对称密钥
Run Code Online (Sandbox Code Playgroud)openssl rsautl -decrypt -inkey private.pem -in key.bin.enc -out key.bin现在,他们可以使用对称密钥来解密文件
Run Code Online (Sandbox Code Playgroud)openssl enc -d -aes-256-cbc -in myLargeFile.xml.enc \ -out myLargeFile.xml -pass file:./key.bin
而且你已经完成了.另一个人有解密的文件,它被安全地发送.
在对n. 'pronouns' m.的回答的更多解释中,
公钥加密不用于加密任意长的文件。一种使用对称密码(比如 AES)来进行普通加密。每次生成、使用新的随机对称密钥,然后使用 RSA 密码(公钥)加密。密文与加密的对称密钥一起传送给接收者。接收者使用他的私钥解密对称密钥,然后使用对称密钥解密消息。
有加密流程:
+---------------------+ +--------------------+
| | | |
| generate random key | | the large file |
| (R) | | (F) |
| | | |
+--------+--------+---+ +----------+---------+
| | |
| +------------------+ |
| | |
v v v
+--------+------------+ +--------+--+------------+
| | | |
| encrypt (R) with | | encrypt (F) |
| your RSA public key | | with symmetric key (R) |
| | | |
| ASym(PublicKey, R) | | EF = Sym(F, R) |
| | | |
+----------+----------+ +------------+-----------+
| |
+------------+ +--------------+
| |
v v
+--------------+-+---------------+
| |
| send this files to the peer |
| |
| ASym(PublicKey, R) + EF |
| |
+--------------------------------+
Run Code Online (Sandbox Code Playgroud)
以及解密流程:
+----------------+ +--------------------+
| | | |
| EF = Sym(F, R) | | ASym(PublicKey, R) |
| | | |
+-----+----------+ +---------+----------+
| |
| |
| v
| +-------------------------+-----------------+
| | |
| | restore key (R) |
| | |
| | R <= ASym(PrivateKey, ASym(PublicKey, R)) |
| | |
| +---------------------+---------------------+
| |
v v
+---+-------------------------+---+
| |
| restore the file (F) |
| |
| F <= Sym(Sym(F, R), R) |
| |
+---------------------------------+
Run Code Online (Sandbox Code Playgroud)
此外,您可以使用以下命令:
# generate random symmetric key
openssl rand -base64 32 > /config/key.bin
# encryption
openssl rsautl -encrypt -pubin -inkey /config/public_key.pem -in /config/key.bin -out /config/key.bin.enc
openssl aes-256-cbc -a -pbkdf2 -salt -in $file_name -out $file_name.enc -kfile /config/key.bin
# now you can send these files: $file_name.enc + /config/key.bin.enc
# decryption
openssl rsautl -decrypt -inkey /config/private_key.pem -in /config/key.bin.enc -out /config/key.bin
openssl aes-256-cbc -d -a -pbkdf2 -in $file_name.enc -out $file_name -kfile /config/key.bin
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99042 次 |
| 最近记录: |