不建议使用smime加密非常大的文件,因为您可以使用-stream选项加密大文件,但由于硬件限制,不能解密生成的文件 请参见:解密大文件时问题
如上所述,公钥加密不是用于加密任意长文件。因此,以下命令将生成一个密码,使用对称加密对文件进行加密,然后使用非对称(公用密钥)对密码进行加密。注意: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
已针对大于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