使用公钥加密大文件

时间:2015-10-19 12:11:51

标签: shell openssl

我正在开发一个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上找到了对同一问题的评论,但建议的解决方案无效。

1 个答案:

答案 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

解决方案基于:

  1. http://linuxconfig.org/easy-way-to-encrypt-and-decrypt-large-files-using-openssl-and-linux
  2. https://unix.stackexchange.com/questions/1588/break-a-large-file-into-smaller-pieces#1589