分享

浅谈支付网关的接口安全协议

 java_laq小馆 2013-07-10
浅谈支付网关的接口安全协议(2011-01-06 00:20:22)

网上支付对个人站长放开,是近两年的事。我做过基本上市面上所有第三方支付的网关对接开发,通过对各服务商的接口安全协议进行对比,发现各服务商的纯http协议的接口,所采取的加密和验证方式基本上是一致的。

简单来说,这种加密验证方式,有三个要点。

1、选择要参与加密的字段。凡是不允许修改的字段,都必须参与加密。举例说,一个网上支付接口,参与加密的字段至少应包括:订单号、支付金额、回传地址、商家代码。
2、密钥。如果仅仅是把要传递的字段串起来,做一个md5加密传过去作为验证依据,则会比较容易被伪造。因此我们要加一个只有接口双方知道的干扰元素,先把加密串的内容进行一个简单的混淆,然后再进行md5加密,这样别人就很难伪造验证字符串了。这个作为干扰元素的东西,就是密钥。密钥的使用方式很简单,就像其它字段参与拼串的方式一样,用一个“key=密钥值”的形式拼进去就可以了。
3、md5加密。把选定的字段串起来,按照第二点的方法再拼入密钥,然后进行md5加密。

举个简单的例子吧。

比如,第三方支付接口规定的字段名如下:
order_id – 订单号
v_amount – 支付金额
replay_url – 回传地址
customer_id – 商户号
约定密钥key

拼串如下:
$str = ‘order_id=29102&v_amount=100&replay_url=http://www./paycenter/reply.php&customer_id=384894-728-8839&key=ksudyrhjsixi’

32位加密:
$key = md5(strtolower($str),false)

至此加密过程完成,只需要把加密结果加上所需传递的字段,一起用get方式传过去即可。注意,参与加密的字段,除密钥之外,必须都传递过去。

解密的过程,跟加密基本一样。比如,a端把加密信息传给b端。b端会收到各关键参数以及a端发过来的关键参数加密结果。b端的工作就是还原a端的拼串、做MD5加密运算等一系列操作,然后,把运算结果跟传过来的加密结果对比。如果b端的运算结果与a端传过来的运算结果一致,说明参数值未被篡改,就可以放心使用了。

其实,这个加密解密的方式,关键就是双方约定的那个密钥。密钥只有a、b双方知道,那么篡改参数的第三方就拼不出正确的加密结果,在b端就不能获得验证。

该协议可以广泛应用于各类接口,自己的不同系统之间如果需要接口对接,也完全可以借用这种方式。

 

本文来自老彭的职业博客 http://www./?p=156

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多