kmLPx2hj0jDBA','Timestamp' : 1429509550}
[0058]S22、拼接請(qǐng)求字符串:把S21排序好的請(qǐng)求參數(shù)格式化成key=vavlue的格式, 然后用〃&〃拼接在一起;不包括簽名(Signature)參數(shù),value為申請(qǐng)的值,而不是url進(jìn) 行編碼后的值,組合結(jié)果如下:
[0059]Action=APIInstances&Nonce= 2046120730&Region=sc&Secretld= CDKIu9ujbsJ5yKBZQpn74WFkmLPx2hj0jDBA&Timestamp= 1429509550 ;
[0060]S23、拼接簽名原文字符串:對(duì)簽名原文進(jìn)行拼接,得到簽名字符串,其拼接規(guī)則 為:請(qǐng)求方法+請(qǐng)求主機(jī)+請(qǐng)求路徑+ ?+請(qǐng)求字符串:
[0061] 請(qǐng)求方法:支持GET和POST方式,本實(shí)施例假設(shè)為POST請(qǐng)求,注意POST為全大 寫(xiě);
[0062] 請(qǐng)求主機(jī):xxx.api.com,根據(jù)接口所屬模塊不同域名也不同,詳見(jiàn)接口文檔;
[0063]請(qǐng)求路徑:/API/index.jsp;
[0064] 請(qǐng)求字符串:即前S22生成的請(qǐng)求字符串;
[0065] 本實(shí)施例的拼接結(jié)果為:
[0066]POSTxxx.api.comxxx.api.com/API/index,jsp?Action=APIInstances&Nonce =2046120730&Region=sc&Secretld=CDKIu9ujbsJ5yKBZQpn74WFkmLPx2hj0jDBA&Time stamp= 1429509550 ;
[0067]S24、生成簽名:云平臺(tái)API使用HMAC-SHA1算法對(duì)S23得到的簽名原文字符串進(jìn) 行加密,并結(jié)合SecretKey生成簽名:拼接簽名原文字符串+加密密鑰=獲取的簽名;所述 的生成簽名算法的具體實(shí)現(xiàn)過(guò)程如下:
[0068]S241、填充附加位:填充使消息報(bào)文長(zhǎng)度512取模余64bit,填充長(zhǎng)度范圍為1到 512,最高位為1,其余為0 ;
[0069]S242、附加報(bào)文長(zhǎng)度:把一個(gè)64bit塊的報(bào)文附加在上述報(bào)文之后,從而達(dá)到 512bit的倍數(shù);
[0070]S243、初始化MD緩沖區(qū):使用160位來(lái)存放哈希函數(shù)的初始變量、中間摘要及最終 摘要,緩存前進(jìn)行初始化,并給初始變量(每個(gè)變量32bit)賦值,SP:
[0071]H0 = 0X67452301 ;H2 =OXefcdab89 ;
[0072]H3 = 0X98badcfe;H4 =OX10325476 ;
[0073]H5 =OXe3d2elf;
[0074]S244、進(jìn)入消息處理主循環(huán),一次處理512bit,共有4輪,每輪20次操作;參見(jiàn)單 個(gè)512塊SHA-1處理邏輯圖,如圖2所示,4輪具有類(lèi)似的結(jié)構(gòu),但每輪使用的輔助函數(shù)和常 數(shù)不同,分別為:
[0075] (a)對(duì)于t= 0 ~19ft(B,C,D) =(BANDC)OR((NOTB)ANDD)Kt= 0X5a827999 ;
[0076] (b)對(duì)于t = 20 ~39ft(B,C,D) =BXORCXORDKt = 0x6ed9ebal ;
[0077] (C)對(duì)于t = 40 ~59ft(B,C,X) = (BANDC)0R(BANDD)0R(CANDD)Kt= 0x8flbbcdc:
[0078] (d)對(duì)于t= 60 ~79ft(B,C,D) =BxORCxORDKt= 0Xca62cld6 ;
[0079] 注:AND表示邏輯與;NOT表示邏輯非;XOR表示邏輯異或;OR表示邏輯或;
[0080] 主循環(huán)開(kāi)始先將消息塊從16個(gè)32bit字(M0~M15)轉(zhuǎn)化成80個(gè)32bit字(W0~ W79):
[0081] fort= 0to15do
[0082]fft=Mt:
[0083] for£ = 16to79do
[0084]Wt=(Wt- 3X0R8X0RWt- 14X0RWt- 16)
[0085] <?1 :
[0086]fort=Oto 79do
[0087] TEMP= (A?<5)+ft(B,C,D)+E+fft+Kt;
[0088] E=D;D=C;C=s30 (B);B=A;A=TEMP;
[0089] HO=H0+A;,HI=Hl+B;H2 =I-I2+C;
[0090]H3 =H3+D;H4 :H4+E;進(jìn)入下一輪循環(huán)。
[0091] 歸納起來(lái)為:
[0092] A,B,C,D,E-(E+f(t,B,C,D)+S(A)+Wt+Kt),A,S如(B),C,D
[0093]其中:A,B,C,D,E=緩沖區(qū)的 5 個(gè)字;t=步數(shù),0〈 =t〈 = 79 ;f(t,B,C,D)=步 t的基本邏輯函數(shù);Sk=循環(huán)左移k位給定的32位字;Wt=-個(gè)從當(dāng)前512數(shù)據(jù)塊導(dǎo)出的 32位字;Kt= 一個(gè)用于加法的常量,四個(gè)不同的值,如前所述;+=加模232。
[0094]S245、將初始變量的賦值H0,Hl,H2,H3,H4級(jí)聯(lián)后作為初始輸出,消息處理主循環(huán) 運(yùn)算完成后就輸出160bit的消息摘要;
[0095] 本實(shí)施例的拼接簽名原文字符串為:
[0096]POSTxxx.api.comxxx.api.com/API/index,jsp?Action=APIInstances&Nonce =2046120730&Region=sc&Secretld=CDKIu9ujbsJ5yKBZQpn74WFkmLPx2hj0jDBA&Time stamp= 1429509550
[0097]加密密鑰SecretKey:Sr4d3gHBRNpq86cd98joQYCu2Dddh2eB
[0098] 通過(guò)步驟S241~S245的計(jì)算方法得到簽名為:/d8WqE4fF2mEUWMB25DIv6HjMjM ,
[0099]S25、添加簽名,向服務(wù)器發(fā)送驗(yàn)證請(qǐng)求,包括以下步驟:
[0100] S251、請(qǐng)求參數(shù)中添加步驟S24生成的簽名,并且對(duì)簽名進(jìn)行UrlEncode,得到最 終的請(qǐng)求Url;最終的請(qǐng)求Url為:
[0101]https://xxx.api.comxxx.api.com/API/index.jsp ? Action = APIInstances&Nonce = 2046120730&Region = sc&Secretld = CDKIu9ujbsJ5yKBZQpn74WF kmLPx2hj0jDBA&Timestamp = 1429509550;
[0102]S252、發(fā)送HTTPS協(xié)議的POST請(qǐng)求即可得到JSON字符串格式的接口返回值;不同 的業(yè)務(wù)返回不同的數(shù)據(jù),這里以登錄示例:
[0103]
[0104] S3、進(jìn)行接口調(diào)試測(cè)試:對(duì)生成的簽名進(jìn)行驗(yàn)證(通過(guò)代碼進(jìn)行驗(yàn)證),可以在不 同的語(yǔ)言上(調(diào)用支持http/https協(xié)議),簽名驗(yàn)證通過(guò)后即可以訪問(wèn)云平臺(tái)的接口。[0105] 本領(lǐng)域的普通技術(shù)人員將會(huì)意識(shí)到,這里所述的實(shí)施例是為了幫助讀者理解本發(fā) 明的原理,應(yīng)被理解為本發(fā)明的保護(hù)范圍并不局限于這樣的特別陳述和實(shí)施例。本領(lǐng)域的 普通技術(shù)人員可以根據(jù)本發(fā)明公開(kāi)的這些技術(shù)啟示做出各種不脫離本發(fā)明實(shí)質(zhì)的其它各 種具體變形和組合,這些變形和組合仍然在本發(fā)明的保護(hù)范圍內(nèi)。
【主權(quán)項(xiàng)】
1. 一種面向云平臺(tái)接口鑒權(quán)簽名方法,其特征在于,包括以下步驟: 51、 申請(qǐng)安全憑證:在統(tǒng)一云平臺(tái)中申請(qǐng)SecretId和SecretKey,其中,SecretId是用 于標(biāo)識(shí)API調(diào)用者的身份,SecretKey是用于加密簽名字符串和服務(wù)器端驗(yàn)證簽名字符串 的密鑰; 52、 生成簽名:根據(jù)Sl申請(qǐng)的安全憑證,并結(jié)合區(qū)域參數(shù)、時(shí)間戳參數(shù)和隨機(jī)正整數(shù)參 數(shù)生成簽名; 53、 進(jìn)行接口調(diào)試測(cè)試:對(duì)生成的簽名進(jìn)行驗(yàn)證,簽名驗(yàn)證通過(guò)后即可以訪問(wèn)云平臺(tái)的 接口。2. 根據(jù)權(quán)利要求1所述的一種面向云平臺(tái)接口鑒權(quán)簽名方法,其特征在于,所述的步 驟S2包括以下子步驟: 521、 對(duì)參數(shù)排序:對(duì)請(qǐng)求參數(shù)按參數(shù)名做字典序升序排列; 522、 拼接請(qǐng)求字符串:把S21排序好的請(qǐng)求參數(shù)格式化成key=vavlue的格式,然后 用拼接在一起; 523、 拼接簽名原文字符串:對(duì)簽名原文進(jìn)行拼接,得到簽名字符串,其拼接規(guī)則為:請(qǐng) 求方法+請(qǐng)求主機(jī)+請(qǐng)求路徑+?+請(qǐng)求字符串; 524、 生成簽名:云平臺(tái)API使用HMAC-SHA1算法對(duì)S23得到的簽名原文字符串進(jìn)行加 密,并結(jié)合SecretKey生成簽名:拼接簽名原文字符串+加密密鑰=獲取的簽名; 525、 添加簽名,向服務(wù)器發(fā)送驗(yàn)證請(qǐng)求。3. 根據(jù)權(quán)利要求2所述的一種面向云平臺(tái)接口鑒權(quán)簽名方法,其特征在于,所述的步 驟S24的生成簽名算法的具體實(shí)現(xiàn)過(guò)程如下: 5241、 填充附加位:填充使消息報(bào)文長(zhǎng)度512取模余64bit,填充長(zhǎng)度范圍為1到512, 最尚位為1,其余為〇 ; 5242、 附加報(bào)文長(zhǎng)度:把一個(gè)64bit塊的報(bào)文附加在上述報(bào)文之后,從而達(dá)到512bit的 倍數(shù); 5243、 初始化MD緩沖區(qū):使用160位來(lái)存放哈希函數(shù)的初始變量、中間摘要及最終摘 要,緩存前進(jìn)行初始化,并給初始變量賦值; 5244、 進(jìn)入消息處理主循環(huán),一次處理512bit,共有4輪,每輪20次操作; 5245、 將初始變量的賦值級(jí)聯(lián)后作為初始輸出,消息處理主循環(huán)運(yùn)算完成后就輸出 160bit的消息摘要。4. 根據(jù)權(quán)利要求2所述的一種面向云平臺(tái)接口鑒權(quán)簽名方法,其特征在于,所述的步 驟S25包括以下步驟: 5251、 請(qǐng)求參數(shù)中添加步驟S24生成的簽名,并且對(duì)簽名進(jìn)行UrlEncode,得到最終的 請(qǐng)求Url; 5252、 發(fā)送HTTPS協(xié)議的請(qǐng)求即可得到JSON字符串格式的接口返回值。
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種面向云平臺(tái)接口鑒權(quán)簽名方法,包括以下步驟:S1、申請(qǐng)安全憑證:在統(tǒng)一云平臺(tái)中申請(qǐng)SecretId和SecretKey,其中,SecretId是用于標(biāo)識(shí)API調(diào)用者的身份,SecretKey是用于加密簽名字符串和服務(wù)器端驗(yàn)證簽名字符串的密鑰;S2、生成簽名:根據(jù)S1申請(qǐng)的安全憑證,并結(jié)合區(qū)域參數(shù)、時(shí)間戳參數(shù)和隨機(jī)正整數(shù)參數(shù)生成簽名;S3、進(jìn)行接口調(diào)試測(cè)試:對(duì)生成的簽名進(jìn)行驗(yàn)證,簽名驗(yàn)證通過(guò)后即可以訪問(wèn)云平臺(tái)的接口。本發(fā)明利用加密技術(shù)、數(shù)據(jù)庫(kù)訪問(wèn)與多事務(wù)處理技術(shù),實(shí)現(xiàn)數(shù)據(jù)接口鑒權(quán)訪問(wèn),可保證訪問(wèn)接口數(shù)據(jù)傳輸互不干擾,安全高速。
【IPC分類(lèi)】H04L29/08, H04L29/06
【公開(kāi)號(hào)】CN104935568
【申請(qǐng)?zhí)枴緾N201510188181
【發(fā)明人】楊煒林
【申請(qǐng)人】成都康賽信息技術(shù)有限公司
【公開(kāi)日】2015年9月23日
【申請(qǐng)日】2015年4月20日