使用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