不建议使用 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
已针对 >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