电竞比分网-中国电竞赛事及体育赛事平台

分享

淺談支付網關的接口安全協(xié)議

 java_laq小館 2013-07-10
淺談支付網關的接口安全協(xié)議(2011-01-06 00:20:22)

網上支付對個人站長放開,是近兩年的事。我做過基本上市面上所有第三方支付的網關對接開發(fā),通過對各服務商的接口安全協(xié)議進行對比,發(fā)現(xiàn)各服務商的純http協(xié)議的接口,所采取的加密和驗證方式基本上是一致的。

簡單來說,這種加密驗證方式,有三個要點。

1、選擇要參與加密的字段。凡是不允許修改的字段,都必須參與加密。舉例說,一個網上支付接口,參與加密的字段至少應包括:訂單號、支付金額、回傳地址、商家代碼。
2、密鑰。如果僅僅是把要傳遞的字段串起來,做一個md5加密傳過去作為驗證依據(jù),則會比較容易被偽造。因此我們要加一個只有接口雙方知道的干擾元素,先把加密串的內容進行一個簡單的混淆,然后再進行md5加密,這樣別人就很難偽造驗證字符串了。這個作為干擾元素的東西,就是密鑰。密鑰的使用方式很簡單,就像其它字段參與拼串的方式一樣,用一個“key=密鑰值”的形式拼進去就可以了。
3、md5加密。把選定的字段串起來,按照第二點的方法再拼入密鑰,然后進行md5加密。

舉個簡單的例子吧。

比如,第三方支付接口規(guī)定的字段名如下:
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端會收到各關鍵參數(shù)以及a端發(fā)過來的關鍵參數(shù)加密結果。b端的工作就是還原a端的拼串、做MD5加密運算等一系列操作,然后,把運算結果跟傳過來的加密結果對比。如果b端的運算結果與a端傳過來的運算結果一致,說明參數(shù)值未被篡改,就可以放心使用了。

其實,這個加密解密的方式,關鍵就是雙方約定的那個密鑰。密鑰只有a、b雙方知道,那么篡改參數(shù)的第三方就拼不出正確的加密結果,在b端就不能獲得驗證。

該協(xié)議可以廣泛應用于各類接口,自己的不同系統(tǒng)之間如果需要接口對接,也完全可以借用這種方式。

 

本文來自老彭的職業(yè)博客 http://www./?p=156

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多