我正在开发一个shell脚本,除其他外,还使用公共密钥对一些文件进行加密 - 打算使用私有密码解密 - 使用smime
命令。
smime
适用于小文件,但不适用于大型(> 4GB)文件。
openssl smime -aes-256-cbc -encrypt -in INPUT_FILE_NAME -binary -outform DEM -out OUTPUT_FILE_NAME PUBLIC_PEM_FILE
此行显示没有错误,输出文件已创建,但在调用完成后仍保持为空。
如何加密小文件和大文件?
编辑1:在how to encrypt a large file in openssl using public key上找到了对同一问题的评论,但建议的解决方案无效。
答案 0 :(得分:1)
通过将大文件拆分成小块来解决问题:
# Splits large file into 500MB pieces
split -b 500M -d -a 4 INPUT_FILE_NAME input.part.
# Encrypts each piece
find -maxdepth 1 -type f -name 'input.part.*' | sort | xargs -I % openssl smime -encrypt -binary -aes-256-cbc -in % -out %.enc -outform DER PUBLIC_PEM_FILE
为了便于获取信息,以下是如何解密并将所有部分组合在一起的内容:
# Decrypts each piece
find -maxdepth 1 -type f -name 'input.part.*.enc' | sort | xargs -I % openssl smime -decrypt -in % -binary -inform DEM -inkey PRIVATE_PEM_FILE -out %.dec
# Puts all together again
find -maxdepth 1 -type f -name 'input.part.*.dec' | sort | xargs cat > RESTORED_FILE_NAME
解决方案基于: