支付宝技术文档读书笔记(二)安全规范

      说到安全规范,就不得不提数字签名了。

      数据传输过程中的数据真实性和完整性,我们需要对数据进行数字签名,在接受签名数据之后进行签名校验。

      MD5签名算法

      MD5签名算法算是众多签名算法中比较简单的了。现在假设商户系统与支付宝系统之间使用MD5进行加密。下面是原始数据。

< form 
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。

      第一步是产生待签名数据,首先根据淘宝的签名机制对参数进行排序(这里就不说明排序机制是怎样的了),结果如下。   

_input_charset = utf - 8  
body
=
discount
= 0  
logistics_fee
= 10  
  …………………………………………… 
seller_email
= test@msn.com 
service
= trade_create_by_buyer
show_url
= www.sina.com.cn 
subject
= 商品名称

      

      第二步是把参数用“&”连接起来。

_input_charset=utf-8 &body =a &discount =0 &logistics_fee =
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是一种摘要生成算法,本来是不能用于签名的。但是,通过在待签名数据之后加上一串私密内容(指令发送、接收双发实现规定好的,这里我们成为签名密钥),就可以用于签名了。但是这种算法签名只能起到防数据篡改的功能,不能起到签名防抵赖的功能,因为双发都知道签名密钥。

_input_charset=utf-8 &body =a &discount =0 &logistics_fee =1
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发起请求,请求参数的顺序不做要求:

https://www.alipay.com/cooperate/gateway.do?sel
ler_email=test%40msn.com
&discount =0 &logistics_f
ee=0.01
&notify_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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值