文件传输-对数据进行加解密的方法!

由于项目安全要求,需要使用RSA算法对部分关键数据进行加密,并使用OAEPWithSHA-256AndMGF1对数据进行填充。通过搜索最终选择较为通用OpenSSL库,但OpenSSL的RSA算法默认是使用SHA-1的方式进行,而项目要求使用安全性更高的SHA-256,所以需要对OpenSSL进行部分修改。


OpenSSL使用RSA算法加解密数据非常简单,这里以加密为例,在通过PEM_read_RSA_PUBKEY读取证书后即可通过RSA_public_encrypt函数对数据进行加解密,看一下这个函数的声明: 


文件传输-对数据进行加解密的方法!


这里可以看到除了输入输出数据和rsa对象之外还有一个填充方式,可选的填充方式有RSA_PKCS1_PADDING、RSA_PKCS1_OAEP_PADDING、RSA_SSLV23_PADDING、RSA_NO_PADDING,这里选择RSA_PKCS1_OAEP_PADDING,但目前使用的还是SHA-1的算法,通过RSA_public_encrypt的参数不能修改。跟进RSA_public_encrypt函数: 


文件传输-对数据进行加解密的方法!


这里看到调用了rsa对象里一个指针指向的函数,OpenSSL里有大量这种用法,给代码阅读带来困难,一个快速且有效的方法是通过动态调试,在这类调用上下断点后单步跟进,即可看到其真正调用的函数。通过调试,这里会调用RSA_eay_public_encrypt,并根据我们传入的参数调用RSA_padding_add_PKCS1_OAEP: 


文件传输-对数据进行加解密的方法!


而RSA_padding_add_PKCS1_OAEP只是新增了两个空的参数直接调用了RSA_padding_add_PKCS1_OAEP_mgf1,再看一下RSA_padding_add_PKCS1_OAEP_mgf1的实现: 


文件传输-对数据进行加解密的方法!


当传入的md的值为空时,这里就会使用EVP_sha1的地址赋值,即默认使用SHA-1的算法,我们需要使用SHA-256算法时,一个最简单的方法就是将这里的EVP_sha1改为EVP_sha256,重新编译并链接修改过的库即可。但这可能会导致当前程序中其他使用了OpenSSL库的其他代码出现异常,一个更通用的方法是通过直接调用RSA_padding_add_PKCS1_OAEP_mgf1并将md的值赋为EVP_sha256。


大文件传输领域,数据加密对于传输的重要性非比一般,安全稳定的传输数据是每一个企业所想要达到的要求。专注于文件传输的镭速 (Raysync)拥有独特的数据传输加密技术,在互联网时代,毕竟大数据的安全性是最重要的!满足企业的多个与安全相关的信息要求时,健康的加密技术可以轻松地作为可靠的安全工具。只使用加密技术,您永远无法获得最佳效益。事实上,您需要根据您的独特要求和风险战略性地适当地使用它。在这个时代,加密文件传输服务已经成为安全在线大文件传输最流行的方法之一。在保护敏感数据和信息方面,加密功能可以作为一道防线。


上一篇:PKCS#1 V2.0是否为Java实现?


下一篇:Transformer可解释性:注意力机制注意到了什么?