博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RSA和MD5加密
阅读量:6273 次
发布时间:2019-06-22

本文共 887 字,大约阅读时间需要 2 分钟。

hot3.png

不知不觉项目已经做了一年多了,从一开始简单的业务实现,到现在各个版本,各个终端并行升级的平台,项目已经逐步进入平稳发展的阶段。这时系统安全问题也就显得愈发重要。

接口部分最开始返回值没有加密,APP也没有对返回结果做任何验证,终于线上项目的一些漏洞被用户证实了,后面又有专家对我们系统的安全性能进行检测,结果很糟糕,这一系列事情引起了领导的重视。后面经理决定从最新版本开始对接口返回值加密。系统之前的请求参数一直是加密的,所以返回值加密和请求参数一致,用对等加密。

后面我再看了一下支付宝下单接口sign字段的生成是用的RSA加密,微信下单sign字段用的是md5加密,出于好奇,就去查了资料,看看这些加密。

sign字段的作用就是验证对方的身份和防止数据被篡改。

RSA加密属于非对等加密,用户需要设置公钥,用户用私钥加密后,支付宝后台用公钥解密,将解密后的参数与传过来的参数进行对比达到验证的作用。支付宝返回值也是用他的私钥加密,用户再用公钥解密。

MD5加密属于对等加密,md5加密是不可逆的,所以也是比较安全的。双方面使用一个key进行加密验证。发送者使用md5加密后,接收者把接收到的参数进行md5加密,再和收到的sign字段对比,达到验证的作用。支付宝的无密接口也提供了md5加密方式,想必是这种加密方式简单一些,适合多参数加密,而RSA加密解密算法相对复杂。

回过头想一下我们自己的系统,我觉得可以用RSA加密方式做验证,只需向app提供公钥,服务器自己保留私钥。APP向服务器请求是可以不做签名验证,没意义,只对参数的合理性做验证就够了。。如果服务器接收请求时也需要对请求参数做签名验证,那发送者也应该有自己的私钥,并要把公钥传到服务器。涉及到支付等重要数据的请求最好应该作签名验证。

目前我们系统对所以返回值都加密了,其实我觉得大可没必要,只需要对一些包含重要信息的接口进行加密,比如请求支付返回的数据,而像查询商品列表,详情等接口完全不需要加密,降低了效率。

 

转载于:https://my.oschina.net/emperror/blog/791181

你可能感兴趣的文章
Spring中bean注入前后的一些操作:
查看>>
如何让oracle DB、监听和oem开机启动(dbstart)
查看>>
HDU 2639 Bone Collector II(01背包变形【第K大最优解】)
查看>>
MailMail正式发布!注册码免费发放活动开启!(已结束~~不要再回复咧~)
查看>>
一个分层架构设计的例子(2)
查看>>
时态数据库的应用介绍(2)--时态数据库之TimeDB
查看>>
BZOJ 1207: [HNOI2004]打鼹鼠【妥妥的n^2爆搜,dp】
查看>>
Linux kernel scriptes bin2c "\x"
查看>>
当智能交通遇上大数据 智能交通不再是梦
查看>>
iOS开发 - Content hugging priority & Content compression resistance priority
查看>>
centos6下mysql的主从复制的配置
查看>>
Object-C--->Swift之(七)嵌套函数与闭包
查看>>
css继承样式怎么控制?用选择器
查看>>
Http和Https三次握手那些事
查看>>
WCF 添加 RESTful 支持,适用于 IIS、Winform、cmd 宿主
查看>>
105.4. Installing Ganglia on Centos
查看>>
Drupal 曝出代码执行高危漏洞,数百万网站受影响
查看>>
SAP MM 移动类型107和109之研究
查看>>
SAP MM 系统确定供应源优先级
查看>>
交货单打印时提示“没有输出被选择打印”
查看>>