文件加密传输

我的需求是这样的,我需要将一份文件通过Email的方式安全地拷贝给外部人员,这份文件在传输的过程中有可能会存在失窃的可能性,所以要求进行加密后传输。

很自然的想到了非对称加密的办法,让接收方生成一份私钥和公钥,把公钥发给发,我用公钥将文件加密后发送给接收方。这样即使在中间过程中文件失窃,由于无法解密,也看不到文件的内容。

But,事实是这样的

SA operation error
89450:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.6/src/crypto/rsa/rsa_pk1.c:153:

openssl提供的工具使用非对称加密无法对过大的文件进行处理(实验得知其实能处理的文件大小很小)

这个方法不行,于是简单的回忆了一下HTTPS工作的过程,于是有了以下的办法:

接收方

生成私钥
openssl genrsa -out private_key.key 1024

提取公钥
openssl rsa -in private_key.key -pubout -out public_key.pub

接收方将公钥发送给发送方

发送方

生成base64编码的64位密码文件
openssl rand -base64 64 > passwd.txt

用公钥加密密码文件
openssl rsautl -encrypt -in ./passwd.txt -inkey ./public_key.pub -pubin -out ./passwd-encrypted.txt

用密码文件加密文件
openssl enc -aes-256-cbc -in ./file.txt -out ./file-encrypted.txt -e -kfile ./passwd.txt

将passwd-encrypted.txt和file-encrypted.txt发送给接收方

接收方

用私钥解密密码文件
openssl rsautl -decrypt -inkey ./private_key.key -in ./passwd-encrypted.txt > passwd-decrypted.txt

用密码文件解密文件
openssl enc -aes-256-cbc -in ./file-encrypted.txt -d -kfile ./passwd.txt -out file.txt

这个过程与HTTPS的过程非常类似(除去无证书验证身份外)

2017年8月10日 | 归档于 Linux
本文目前尚无任何评论.

发表评论

XHTML: 您可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">