概述
说到安全规范,就不得不提数字签名了。
数据传输过程中的数据真实性和完整性,我们需要对数据进行数字签名,在接受签名数据之后进行签名校验。
MD5签名算法
MD5签名算法算是众多签名算法中比较简单的了。现在假设商户系统与支付宝系统之间使用MD5进行加密。下面是原始数据。
name ="alipaysubmit" method ="post" action ="https://www.alipay.com/cooper
ate/gateway.do?_input_charset=utf-8" >
< input type =hidden name ="body" value ="a" >
< input type =hidden name ="logistics_type" value ="EMS" >
< input type =hidden name ="logistics_fee" value ="10" >
< input type =hidden name ="logistics_payment" value ="BUYER_PAY" >
< input type =hidden name ="out_trade_no" value ="2008111517451234" >
< input type =hidden name ="partner" value ="2088002123456782" >
< input type =hidden name ="payment_type" value ="1" >
< input type =hidden name ="seller_email" value ="test@msn.com" >
< input type =hidden name ="service" value ="trade_create_by_buyer" >
< input type =hidden name ="sign" value ="abc123" >
< input type =hidden name ="sign_type" value ="MD5" >
< input type =hidden name ="subject" value ="商品名称" >
< input type =hidden name ="price" value ="0.01" >
< input type =hidden name ="quantity" value ="1" >
< input type =hidden name ="discount" value ="0" >
< input type =hidden name ="show_url" value ="http://www.alipay.com" >
< input type =hidden name ="return_url" value ="http://www.alipay.com " >
签名密钥sign=abc123,签名类型sign_type=MD5。
第一步是产生待签名数据,首先根据淘宝的签名机制对参数进行排序(这里就不说明排序机制是怎样的了),结果如下。
body = a
discount = 0
logistics_fee = 10
……………………………………………
seller_email = test@msn.com
service = trade_create_by_buyer
show_url = www.sina.com.cn
subject = 商品名称
第二步是把参数用“&”连接起来。
10 &logistics_payment =SELLER_PAY &logistics_type =EMS &ou
t_trade_no=2008111517451234 &partner =2088002123456782&
payment_type=1 &price =0.01 &quantity =1 &return_url =http:
//www.alipay.com &seller_email =test@msn.com &service =tr
ade_create_by_buyer &show_url =www.sina.com.cn &subject =
商品名称
第三步是再最后加上签名密钥。MD5是一种摘要生成算法,本来是不能用于签名的。但是,通过在待签名数据之后加上一串私密内容(指令发送、接收双发实现规定好的,这里我们成为签名密钥),就可以用于签名了。但是这种算法签名只能起到防数据篡改的功能,不能起到签名防抵赖的功能,因为双发都知道签名密钥。
0 &logistics_payment =SELLER_PAY &logistics_type =EMS &out_
trade_no=2008111517451234 &partner =2088002123456782 &pay
ment_type=1 &price =0.01 &quantity =1 &return_url =http://ww
w.alipay.com &seller_email =test@msn.com &service =trade_c
reate_by_buyer &show_url =www.sina.com.cn &subject = 商品名
称 abc123
根据请求参数sign_type来判断采用那种加密算法(这里sign_type=MD5),最终计算出来sign=4b04730e2e8a0a034fa66c509030f8af。
根据请求/响应交互模式处理流程的支付宝系统服务接入URL,我们按照以下URL发起请求,请求参数的顺序不做要求:
ler_email=test%40msn.com &discount =0 &logistics_f
ee=0.01 ¬ify_url =http%3A%2F%2Flocalhost%3A808
8%2Fjsp_shi_gbk%2Falipay_notify.jsp &payment_typ
e=1 &service =trade_create_by_buyer &partner =20880
02509209142 &_input_charset =utf-8 &logistics_type
=EMS &price =0.01 &out_trade_no =20081118082127 &sub
ject=%E5%95%86%E5%93%81%E5%90%8D%E7%A7%B0 &logis
tics_payment=SELLER_PAY &quantity =1 &body =a &retur
n_url=http%3A%2F%2Flocalhost%3A8088%2Fjsp_shi_g
bk%2Falipay_return.jsp &show_url =www.sina.com &sig
n=4b04730e2e8a0a034fa66c509030f8af &sign_type =MD5
支付宝系统接收到请求后,会根据上面的步骤生成新的sign,通过比较新旧两个sign就可以知道数据是否被篡改过。同理,商户系统接收到支付宝系统的返回值后,也通过重新计算和对比sign的值就知道数据是否真实可靠。
DSA签名算法
DSA是一种非对称的签名算法,即签名密钥(私钥)与验签名密钥(公钥)是不一样的。私钥用于签名,公钥用于验证签名。使用这种算法签名在起到防数据篡改功能的同时,还可以起到防抵赖的作用,因为私钥只有签名者知道。
商家系统发送请求时,使用自己的密钥对待签名数据进行DSA签名,支付宝系统使用商户的公钥进行校验;支付宝系统返回数据时,使用支付宝的私钥对待签名数据进行DSA签名,商户使用支付宝的公钥进行校验。
RSA签名算法
RSA也是一种非对称算法,同时它还是一种加密算法,使用方法跟DSA签名算法类似。
各种签名算法的对比
转载于:https://www.cnblogs.com/StephenHuang/archive/2009/07/02/1515884.html
最后
以上就是鳗鱼冷风为你收集整理的支付宝技术文档读书笔记(二)安全规范的全部内容,希望文章能够帮你解决支付宝技术文档读书笔记(二)安全规范所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复