由于项目安全要求,需要使用RSA算法对部分关键数据进行加密,并使用OAEPWithSHA-256AndMGF1对数据进行填充。通过搜索最终选择较为通用OpenSSL库,但OpenSSL的RSA算法默认是使用SHA-1的方式进行,而项目要求使用安全性更高的SHA-256,所以需要对OpenSSL进行部分修改。
OpenSSL使用RSA算法加解密数据非常简单,这里以加密为例,在通过PEM_read_RSA_PUBKEY读取证书后即可通过RSA_public_encrypt函数对数据进行加解密,看一下这个函数的声明:
![243bf6a9ea3a8440335020e6795b7e49414d9ee9](https://i-blog.csdnimg.cn/blog_migrate/3e3ac136381d28c022e1bf243e9da5fe.png)
这里可以看到除了输入输出数据和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函数:
![cbfe6a2102e3f59aa8265a42bd47f178ae0f702b](https://i-blog.csdnimg.cn/blog_migrate/4fcd4d5d49f8586b1212b87ee5b62930.png)
这里看到调用了rsa对象里一个指针指向的函数,OpenSSL里有大量这种用法,给代码阅读带来困难,一个快速且有效的方法是通过动态调试,在这类调用上下断点后单步跟进,即可看到其真正调用的函数。通过调试,这里会调用RSA_eay_public_encrypt,并根据我们传入的参数调用RSA_padding_add_PKCS1_OAEP:
![54fb82d78960ad6aa3ad559f6684968521277d82](https://i-blog.csdnimg.cn/blog_migrate/7ff0a77ce3ac9219a64830b385339584.png)
而RSA_padding_add_PKCS1_OAEP只是新增了两个空的参数直接调用了RSA_padding_add_PKCS1_OAEP_mgf1,再看一下RSA_padding_add_PKCS1_OAEP_mgf1的实现:
![186f9e4c1a5266363cab0e226e44748178c9f1f2](https://i-blog.csdnimg.cn/blog_migrate/776b81e84e5aedb6709ee06041f72340.png)
当传入的md的值为空时,这里就会使用EVP_sha1的地址赋值,即默认使用SHA-1的算法,我们需要使用SHA-256算法时,一个最简单的方法就是将这里的EVP_sha1改为EVP_sha256,重新编译并链接修改过的库即可。但这可能会导致当前程序中其他使用了OpenSSL库的其他代码出现异常,一个更通用的方法是通过直接调用RSA_padding_add_PKCS1_OAEP_mgf1并将md的值赋为EVP_sha256。
![6d43e5bedadd19316ca6aeb85e487624cbd5da5e](https://i-blog.csdnimg.cn/blog_migrate/85d1b0b4573ca99bc054bc6472272663.png)
在
大文件传输领域,数据加密对于传输的重要性非比一般,安全稳定的传输数据是每一个企业所想要达到的要求。专注于文件传输的
镭速 (Raysync)拥有独特的数据传输加密技术,在互联网时代,毕竟大数据的安全性是最重要的!满足企业的多个与安全相关的信息要求时,健康的加密技术可以轻松地作为可靠的安全工具。只使用加密技术,您永远无法获得最佳效益。事实上,您需要根据您的独特要求和风险战略性地适当地使用它。在这个时代,加密文件传输服务已经成为安全在线大文件传输最流行的方法之一。在保护敏感数据和信息方面,加密功能可以作为一道防线。