本文主要講解以下兩點(diǎn):支付寶的三種支付流程、RSA加密算法的原理。
支付寶的三種支付流程
1.所有的電子商城系統(tǒng)支付邏輯處理,全在服務(wù)器完成,現(xiàn)在被淘汰了。原理就是電商App吧所有的信息提交給電商服務(wù)器,然后又電商服務(wù)器與支付寶服務(wù)器進(jìn)行交互
2.所有的支付邏輯處理,是電商APP調(diào)用手機(jī)的支付寶客戶端,然后由支付寶客戶端和支付寶服務(wù)器進(jìn)行交互處理。
原理就是電商APP向電商服務(wù)器發(fā)送請(qǐng)求,然后電商服務(wù)器生成訂單信息后,返回給電商APP,電商APP進(jìn)行付款時(shí),需要進(jìn)行判斷用戶有沒有支付寶客戶端。如果沒有,則不能支付,提示用戶下載支付寶。如果有則調(diào)用支付寶客戶端進(jìn)行支付。然后支付寶服務(wù)器會(huì)把成功支付的數(shù)據(jù)反饋給電商APP和電商服務(wù)器。
3.所有的支付邏輯處理,在電商本身的APP里進(jìn)行處理,但是要集成支付寶的智能SDK,也就是JAR包,這種方式最常用原理:電商App向服務(wù)器發(fā)送請(qǐng)求,電商服務(wù)器生成訂單信息后,返回給電商APP,電商APP支付時(shí),調(diào)用集成支付寶的智能SDK就可以了,然后智能SDK完成支付,支付寶服務(wù)器就會(huì)把網(wǎng)上商城系統(tǒng)網(wǎng)站成功支付的數(shù)據(jù)反饋給電商APP和電商服務(wù)器。
無論哪種模式都涉及到了三個(gè)重要的信息
一、訂單數(shù)據(jù)
二、用戶賬號(hào)密碼
三、電商服務(wù)器支付寶賬號(hào),電商服務(wù)器的IP地址
要了解的事項(xiàng):
支付成功后,支付寶之所以會(huì)給電商app和電商服務(wù)器各發(fā)一份通知,主要是為了給電商成功支付的提示讓用戶看到,電商服務(wù)器是為了立馬發(fā)貨
支付寶服務(wù)器給電商服務(wù)器發(fā)送通知頻率:2m,10m,10m,1h,2h,6h,15h如果支付寶服務(wù)器發(fā)送7次通知給電商服務(wù)器,而電商服務(wù)器沒有告訴支付寶服務(wù)器“我收到了”,支付寶把錢退回用戶的支付寶上。這個(gè)規(guī)則類似于Socket的三次握手原則,電商服務(wù)器得到的數(shù)據(jù)記得給支付寶服務(wù)器說一下,在支付寶的智能SDK中,最重要的類是PayDemoActivity最重要的方法是pay()方法。
RSA加密算法的原理
眾所周知,支付寶使用的是RSA算法進(jìn)行數(shù)據(jù)加密。
RSA加密算法中,只用到素?cái)?shù)、互質(zhì)數(shù)、指數(shù)運(yùn)算、模運(yùn)算等幾個(gè)簡(jiǎn)單的數(shù)學(xué)知識(shí)。所以,我們也需要了解這幾個(gè)概念即可。
素?cái)?shù)
素?cái)?shù)又稱質(zhì)數(shù),指在一個(gè)大于1的自然數(shù)中,除了1和此整數(shù)自身外,不能被其他自然數(shù)整除的數(shù)。這個(gè)概念,我們?cè)谏铣踔?,甚至小學(xué)的時(shí)候都學(xué)過了,這里就不再過多解釋了。
互質(zhì)數(shù)
百度百科上的解釋是:公因數(shù)只有1的兩個(gè)數(shù),叫做互質(zhì)數(shù)。;維基百科上的解釋是:互質(zhì),又稱互素。若N個(gè)整數(shù)的最大公因子是1,則稱這N個(gè)整數(shù)互質(zhì)。
常見的互質(zhì)數(shù)判斷方法主要有以下幾種:
兩個(gè)不同的質(zhì)數(shù)一定是互質(zhì)數(shù)。例如,2與7、13與19。
一個(gè)質(zhì)數(shù),另一個(gè)不為它的倍數(shù),這兩個(gè)數(shù)為互質(zhì)數(shù)。例如,3與10、5與26。
相鄰的兩個(gè)自然數(shù)是互質(zhì)數(shù)。如15與16。
相鄰的兩個(gè)奇數(shù)是互質(zhì)數(shù)。如49與51。
較大數(shù)是質(zhì)數(shù)的兩個(gè)數(shù)是互質(zhì)數(shù)。如97與88。
小數(shù)是質(zhì)數(shù),大數(shù)不是小數(shù)的倍數(shù)的兩個(gè)數(shù)是互質(zhì)數(shù)。例如7和16。
2和任何奇數(shù)是互質(zhì)數(shù)。例如2和87。
1不是質(zhì)數(shù)也不是合數(shù),它和任何一個(gè)自然數(shù)在一起都是互質(zhì)數(shù)。如1和9908。
輾轉(zhuǎn)相除法。
指數(shù)運(yùn)算
指數(shù)運(yùn)算又稱乘方計(jì)算,計(jì)算結(jié)果稱為冪。nm指將n自乘m次。把nm看作乘方的結(jié)果,叫做”n的m次冪”或”n的m次方”。其中,n稱為“底數(shù)”,m稱為“指數(shù)”。
模運(yùn)算
模運(yùn)算即求余運(yùn)算。“模”是“Mod”的音譯。和模運(yùn)算緊密相關(guān)的一個(gè)概念是“同余”。數(shù)學(xué)上,當(dāng)兩個(gè)整數(shù)除以同一個(gè)正整數(shù),若得相同余數(shù),則二整數(shù)同余。
兩個(gè)整數(shù)a,b,若它們除以正整數(shù)m所得的余數(shù)相等,則稱a,b對(duì)于模m同余,記作:a≡b(mod m);讀作:a同余于b模m,或者,a與b關(guān)于模m同余。例如:26≡14(mod 12)。
公鑰與密鑰的產(chǎn)生
假設(shè)Alice想要通過一個(gè)不可靠的媒體接收Bob的一條私人訊息。她可以用以下的方式來產(chǎn)生一個(gè)公鑰和一個(gè)私鑰:
隨意選擇兩個(gè)大的質(zhì)數(shù)p和q,p不等于q,計(jì)算N=pq。根據(jù)歐拉函數(shù),求得r=(p-1)(q-1)選擇一個(gè)小于r的整數(shù)e,求得e關(guān)于模r的模反元素,命名為d。(模反元素存在,當(dāng)且僅當(dāng)e與r互質(zhì))將p和q的記錄銷毀。(N,e)是公鑰,(N,d)是私鑰。Alice將她的公鑰(N,e)傳給Bob,而將她的私鑰(N,d)藏起來。
也可以用工具生成:
用openssl可以生成RSA的一個(gè)密鑰對(duì),分別是公鑰和私鑰。
RSA特點(diǎn):用公鑰加密的字符串只能用私鑰進(jìn)行解密(記住公鑰加密的字符串不能用公鑰解密);
加密消息
假設(shè)Bob想給Alice送一個(gè)消息m,他知道Alice產(chǎn)生的N和e。他使用起先與Alice約好的格式將m轉(zhuǎn)換為一個(gè)小于N的整數(shù)n,比如他可以將每一個(gè)字轉(zhuǎn)換為這個(gè)字的Unicode碼,然后將這些數(shù)字連在一起組成一個(gè)數(shù)字。假如他的信息非常長的話,他可以將這個(gè)信息分為幾段,然后將每一段轉(zhuǎn)換為n。用下面這個(gè)公式他可以將n加密為c:
ne≡c(mod N)
計(jì)算c并不復(fù)雜。Bob算出c后就可以將它傳遞給Alice。
解密消息
Alice得到Bob的消息c后就可以利用她的密鑰d來解碼。她可以用以下這個(gè)公式來將c轉(zhuǎn)換為n:
cd≡n(mod N)
得到n后,她可以將原來的信息m重新復(fù)原。
解碼的原理是:
cd≡n e·d(mod N)
以及ed≡1(mod p-1)和ed≡1(mod q-1)。由費(fèi)馬小定理可證明(因?yàn)閜和q是質(zhì)數(shù))
n e·d≡n(mod p)和n e·d≡n(mod q)
這說明(因?yàn)閜和q是不同的質(zhì)數(shù),所以p和q互質(zhì))
n e·d≡n(mod pq)
簽名消息
RSA也可以用來為一個(gè)消息署名。假如甲想給乙傳遞一個(gè)署名的消息的話,那么她可以為她的消息計(jì)算一個(gè)散列值(Message digest),然后用她的密鑰(private key)加密這個(gè)散列值并將這個(gè)“署名”加在消息的后面。這個(gè)消息只有用她的公鑰才能被解密。乙獲得這個(gè)消息后可以用甲的公鑰解密這個(gè)散列值,然后將這個(gè)數(shù)據(jù)與他自己為這個(gè)消息計(jì)算的散列值相比較。假如兩者相符的話,那么他就可以知道發(fā)信人持有甲的密鑰,以及這個(gè)消息在傳播路徑上沒有被篡改過。
你的公鑰和支付寶公鑰的交互:
你在支付寶官網(wǎng)進(jìn)行應(yīng)用創(chuàng)建的時(shí)候,支付寶就會(huì)要求你把你的公鑰給支付寶,然后支付寶也會(huì)給你一個(gè)他的公鑰。
在進(jìn)行支付信息加密解密的時(shí)候:
先用base64加密一下這個(gè)信息,然后要用支付寶的公鑰進(jìn)行加密一下,最后用你的私鑰加密一下這個(gè)支付信息,然后給支付寶服務(wù)器發(fā)送過去。同理,在解密的時(shí)候:先獲取支付寶的加密字符串,然后在用你的私鑰解密,再用支付寶的公鑰解密,最后用base64解密,獲取到支付信息;
最后上一張圖來幫助理解服務(wù)器與服務(wù)器之間怎么用RSA算法加密數(shù)據(jù)來進(jìn)行交互。
數(shù)商云全鏈數(shù)字化產(chǎn)品解決方案, 實(shí)現(xiàn)供應(yīng)鏈上中下游資源整合管理
--------
SCM供應(yīng)鏈 / SRM供應(yīng)商 / B2B電商 / 采購管理 / DMS渠道商 / 經(jīng)銷商管理
SaaS多租戶 / S2B2C電商 / S2B2B電商
0 費(fèi) 用 系 統(tǒng) 演 示
▼
文章來源:CDSN
<數(shù)商云(m.zhimaihui.cn)是國內(nèi)知名企業(yè)級(jí)電商平臺(tái)提供商,為企業(yè)級(jí)商家提供系統(tǒng)開發(fā)(多種模式電商平臺(tái)搭建:B2B/B2B2C/B2C/O2O/新零售等)、供應(yīng)鏈系統(tǒng)搭建及電商行業(yè)解決方案服務(wù)>
評(píng)論