文件加密传输
我的需求是这样的,我需要将一份文件通过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的过程非常类似(除去无证书验证身份外)
近期评论