使用非对称加密加密文件

概述

通常,非对称加密有较低的性能,如果对大文件直接使用非对称加密可能导致高负载和高耗时(过大的文件还有可能出现报错 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 -
posted @ 2024-04-23 17:16  SangriaChant  阅读(3)  评论(0编辑  收藏  举报
/* 看板娘 */