我如何用公钥加密一个大文件,这样除了拥有私钥的人之外,没有人能够解密它?
我可以将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位的密钥,但没有成功,同样的错误
发布于 2011-08-22 18:59:23
公钥加密不适用于加密任意长度的文件。一种是使用对称密码(比如AES)来进行正常的加密。每次生成、使用新的随机对称密钥,然后使用RSA密码(公钥)进行加密。将密文与加密的对称密钥一起传送给接收者。接收方使用其私钥解密对称密钥,然后使用对称密钥解密消息。
私钥从不共享,只有公钥用于加密随机对称密码。
发布于 2013-11-17 20:07:13
不建议使用smime加密非常大的文件,因为由于硬件限制,您可能可以使用-stream选项加密大文件,但无法解密结果文件see: problem decrypting big files
如上所述,公钥加密不适用于加密任意长的文件。因此,以下命令将生成密码短语,使用对称加密加密文件,然后使用非对称(公钥)加密密码短语。注意: smime包括使用主公钥和备份密钥来加密密码短语。备份公钥/私钥对将是谨慎的。
随机密码生成
将RANDFILE值设置为当前用户可访问的文件,生成passwd.txt文件并清除设置
export OLD_RANDFILE=$RANDFILE
RANDFILE=~/rand1
openssl rand -base64 2048 > passwd.txt
rm ~/rand1
export RANDFILE=$OLD_RANDFILE
加密
使用以下命令,使用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
解密
解密只是将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
这已经针对大于5 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
发布于 2015-11-19 19:01:57
要使用openssl smime
安全地加密大文件(>600MB),您必须将每个文件拆分为小块:
# Splits large file into 500MB pieces
split -b 500M -d -a 4 INPUT_FILE_NAME input.part.
# Encrypts each piece
find -maxdepth 1 -type f -name 'input.part.*' | sort | xargs -I % openssl smime -encrypt -binary -aes-256-cbc -in % -out %.enc -outform DER PUBLIC_PEM_FILE
为了提供信息,以下是如何解密并将所有片段放在一起:
# Decrypts each piece
find -maxdepth 1 -type f -name 'input.part.*.enc' | sort | xargs -I % openssl smime -decrypt -in % -binary -inform DEM -inkey PRIVATE_PEM_FILE -out %.dec
# Puts all together again
find -maxdepth 1 -type f -name 'input.part.*.dec' | sort | xargs cat > RESTORED_FILE_NAME
https://stackoverflow.com/questions/7143514
复制相似问题