概述
通常,非对称加密有较低的性能,如果对大文件直接使用非对称加密可能导致高负载和高耗时(过大的文件还有可能出现报错 RSA_padding_add_PKCS1_type_2: data too large for key size
)。
因此对于大文件的加密,一般使用密码短语(passphrase
)进行加密,然后使用非对称加密来加密密码短语(passphrase
)
POC
生成随机待加密文件
dd if=/dev/urandom of=firmware bs=1M count=10
生成 RSA 密钥对
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout -out public.pem
打包并加密文件
其中:
- 密码短语使用 openssl 随机生成
- 文件加密使用 pbkdf2 算法,并对密码加盐处理
firmware=./firmware
passphrase=$(openssl rand -base64 32)
tar -czPf - ${firmware} | openssl enc -e -pbkdf2 -a -salt -k ${passphrase} | dd of=firmware.tar.gz.enc
echo ${passphrase} | openssl rsautl -encrypt -pubin -pubin -inkey public.pem -out passphrase.enc
解密和解包
其中:
- 密码短语通过私钥解密
- 文件通过与加密相同的 pbkdf2 算法解密
passphrase=$(openssl rsautl -decrypt -inkey private.pem -in passphrase.enc)
dd if=firmware.tar.gz.enc | openssl enc -d -pbkdf2 -a -salt -d -k ${passphrase} | tar -zxPf -
标签:文件,enc,加密,firmware,openssl,pem,passphrase,非对称
From: https://www.cnblogs.com/sangria/p/18153328