本發(fā)明涉及網(wǎng)絡(luò)安全領(lǐng)域,尤其涉及一種簽名驗證方法、終端及系統(tǒng)。
背景技術(shù):
接口調(diào)用方和接口提供方在進(jìn)行數(shù)據(jù)交互時,為了保證數(shù)據(jù)的安全性,一般需要對應(yīng)用程序編程接口(applicationprogramminginterface,api)進(jìn)行簽名驗證。目前,對api接口進(jìn)行簽名驗證需要使用接口調(diào)用方和接口提供方約定的密鑰。由于該密鑰存在被泄露或暴力破解的風(fēng)險,因此,上述api接口簽名驗證過程的安全性較低,難以保證數(shù)據(jù)交互的安全性。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種簽名驗證方法、終端及系統(tǒng),以提高簽名驗證和數(shù)據(jù)交互的安全性。
第一方面,本發(fā)明實施例提供了一種簽名驗證方法,包括:
獲取應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳;
根據(jù)應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳得到第一簽名值;
根據(jù)應(yīng)用程序接口請求參數(shù)、當(dāng)前時間戳及第一簽名值構(gòu)造目標(biāo)請求;
將目標(biāo)請求發(fā)送至接口提供方,以使接口提供方根據(jù)目標(biāo)請求生成第二簽名值;
接收接口提供方所發(fā)送的驗證結(jié)果,該驗證結(jié)果由接口提供方比對第一簽名值和第二簽名值所得。
第二方面,本發(fā)明實施例提供了一種簽名驗證終端,包括:
獲取單元,用于獲取應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳;
處理單元,用于根據(jù)應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳得到第一簽名值;
構(gòu)造單元,用于根據(jù)應(yīng)用程序接口請求參數(shù)、當(dāng)前時間戳及第一簽名值構(gòu)造目標(biāo)請求;
發(fā)送單元,用于將目標(biāo)請求發(fā)送至接口提供方,以使接口提供方根據(jù)目標(biāo)請求生成第二簽名值;
接收單元,用于接收接口提供方所發(fā)送的驗證結(jié)果,該驗證結(jié)果由接口提供方比對第一簽名值和第二簽名值所得。
第三方面,本發(fā)明實施例還提供了一種簽名驗證方法,包括:
接收接口調(diào)用方所發(fā)送的目標(biāo)請求,該目標(biāo)請求中的請求參數(shù)由接口調(diào)用方的應(yīng)用程序接口請求參數(shù)、接口調(diào)用方的第一簽名值及當(dāng)前時間戳所得,該第一簽名值由應(yīng)用程序接口請求參數(shù)和當(dāng)前時間戳所得;
根據(jù)目標(biāo)請求中的應(yīng)用程序接口請求參數(shù)和當(dāng)前時間戳得到第二簽名值;
比對第一簽名值及第二簽名值以得到驗證結(jié)果。
第四方面,本發(fā)明實施例還提供了一種簽名驗證終端,包括:
接收單元,用于接收接口調(diào)用方所發(fā)送的目標(biāo)請求,該目標(biāo)請求中的請求參數(shù)由接口調(diào)用方的應(yīng)用程序接口請求參數(shù)、接口調(diào)用方的第一簽名值及當(dāng)前時間戳所得,該第一簽名值由應(yīng)用程序接口請求參數(shù)和當(dāng)前時間戳所得;
處理單元,用于根據(jù)目標(biāo)請求中的應(yīng)用程序接口請求參數(shù)和當(dāng)前時間戳得到第二簽名值;
比對單元,用于比對第一簽名值及第二簽名值以得到驗證結(jié)果。
第五方面,本發(fā)明實施例還提供了一種簽名驗證系統(tǒng),包括第一終端及第二終端。其中,該第一終端如上述第二方面所述,第二終端如上述第四方面所述。
本發(fā)明實施例,先基于應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳得到第一簽名值及第二簽名值,再通過比對第一簽名值及第二簽名值以得到驗證結(jié)果,提高了簽名驗證和數(shù)據(jù)交互的安全性。
附圖說明
為了更清楚地說明本發(fā)明實施例技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明第一實施例提供的簽名驗證方法的示意流程圖;
圖2是本發(fā)明第二實施例提供的簽名驗證方法的示意流程圖;
圖3是本發(fā)明第三實施例提供的簽名驗證方法的示意流程圖;
圖4是本發(fā)明第四實施例提供的簽名驗證方法的示意流程圖;
圖5是本發(fā)明第五實施例提供的簽名驗證方法的示意流程圖;
圖6是本發(fā)明第一實施例提供的簽名驗證終端的示意結(jié)構(gòu)圖;
圖7是本發(fā)明第二實施例提供的簽名驗證終端的示意結(jié)構(gòu)圖;
圖8是本發(fā)明第三實施例提供的簽名驗證終端的結(jié)構(gòu)示意圖;
圖9是本發(fā)明第一實施例提供的簽名驗證系統(tǒng)的結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述。
應(yīng)當(dāng)理解,當(dāng)在本說明書和所附權(quán)利要求書中使用時,術(shù)語“包括”和“包含”指示所描述特征、整體、步驟、操作、元素和/或組件的存在,但并不排除一個或多個其它特征、整體、步驟、操作、元素、組件和/或其集合的存在或添加。
還應(yīng)當(dāng)理解,在此本發(fā)明說明書中所使用的術(shù)語僅僅是出于描述特定實施例的目的而并不意在限制本發(fā)明。如在本發(fā)明說明書和所附權(quán)利要求書中所使用的那樣,除非上下文清楚地指明其它情況,否則單數(shù)形式的“一”、“一個”及“該”意在包括復(fù)數(shù)形式。
還應(yīng)當(dāng)進(jìn)一步理解,在本發(fā)明說明書和所附權(quán)利要求書中使用的術(shù)語“和/或”是指相關(guān)聯(lián)列出的項中的一個或多個的任何組合以及所有可能組合,并且包括這些組合。
如在本說明書和所附權(quán)利要求書中所使用的那樣,術(shù)語“如果”可以依據(jù)上下文被解釋為“當(dāng)...時”或“一旦”或“響應(yīng)于確定”或“響應(yīng)于檢測到”。類似地,短語“如果確定”或“如果檢測到[所描述條件或事件]”可以依據(jù)上下文被解釋為意指“一旦確定”或“響應(yīng)于確定”或“一旦檢測到[所描述條件或事件]”或“響應(yīng)于檢測到[所描述條件或事件]”。
具體實現(xiàn)中,本發(fā)明實施例中描述的終端包括但不限于諸如具有觸摸敏感表面(例如,觸摸屏顯示器和/或觸摸板)的移動電話、膝上型計算機或平板計算機之類的其它便攜式設(shè)備。還應(yīng)當(dāng)理解的是,在某些實施例中,所述設(shè)備并非便攜式通信設(shè)備,而是具有觸摸敏感表面(例如,觸摸屏顯示器和/或觸摸板)的臺式計算機。
在接下來的討論中,描述了包括顯示器和觸摸敏感表面的終端。然而,應(yīng)當(dāng)理解的是,終端可以包括諸如物理鍵盤、鼠標(biāo)和/或控制桿的一個或多個其它物理用戶接口設(shè)備。
請參考圖1,是本發(fā)明第一實施例提供的簽名驗證方法的示意流程圖,如圖所示,該方法可包括以下步驟:
s101,獲取應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳。
當(dāng)兩個終端需要進(jìn)行數(shù)據(jù)交互時,通常需要先對應(yīng)用程序編程接口(applicationprogramminginterface,api)進(jìn)行簽名驗證。該兩個終端一般稱為接口調(diào)用方和接口提供方。該接口調(diào)用方或接口提供方可以但不僅限于客戶端或服務(wù)器端或第三方。在本實施例中,接口調(diào)用方指的是客戶端,接口提供方指的是服務(wù)器,但不以此為限。在進(jìn)行簽名驗證時,接口調(diào)用方獲取api接口請求參數(shù)(即應(yīng)用程序接口請求參數(shù))及當(dāng)前時間戳。其中,接口調(diào)用方可獲取本身的系統(tǒng)時間以作為當(dāng)前時間戳,也可以獲取當(dāng)前網(wǎng)絡(luò)時間以作為當(dāng)前時間戳。
s102,根據(jù)應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳得到第一簽名值。
接口調(diào)用方先對api接口請求參數(shù)做字典升序排列,再根據(jù)api接口請求參數(shù)的參數(shù)值和參數(shù)名生成簽名原文,最后采用md5等加密算法對簽名原文進(jìn)行加密以得到初始簽名。其中,該初始簽名可以是32位字長的,且為了與后續(xù)內(nèi)容進(jìn)行區(qū)分,此處的初始簽名可記為sign1。需要說明的是,上述得到初始簽名的方法僅是示例性的,并不以此為限。進(jìn)一步地,接口調(diào)用方還截取當(dāng)前時間戳的后三位數(shù)值,根據(jù)該后三位數(shù)值確定目標(biāo)時變量,并根據(jù)目標(biāo)時變量對32位字長的初始簽名的某些位置進(jìn)行替換處理,以得到第一簽名值。該部分的具體過程將在下一實施例中詳述。
s103,根據(jù)應(yīng)用程序接口請求參數(shù)、當(dāng)前時間戳以及第一簽名值構(gòu)造目標(biāo)請求。
接口調(diào)用方將當(dāng)前時間戳和第一簽名值加入api接口請求參數(shù)中,從而得到目標(biāo)請求。需要說明的是,該目標(biāo)請求包括但不僅限于http請求、https請求、tcp/ip請求及socket請求等。
s104,將目標(biāo)請求發(fā)送至接口提供方,以使接口提供方根據(jù)目標(biāo)請求生成第二簽名值。
接口調(diào)用方將目標(biāo)請求發(fā)送至接口提供方,接口提供方接收該目標(biāo)請求。該接口提供方先對目標(biāo)請求中的api接口請求參數(shù)做字典升序排列,再根據(jù)api接口請求參數(shù)的參數(shù)值和參數(shù)名生成簽名原文,最后采用md5等加密算法對簽名原文進(jìn)行加密以得到初始簽名。其中,該初始簽名可以是32位字長的,且可記為sign2。需要說明的是,上述得到初始簽名的方法僅是示例性的,并不以此為限。接口提供方得到初始簽名之后,會根據(jù)目標(biāo)請求中的當(dāng)前時間戳對初始簽名sign2進(jìn)行替換處理以得到第二簽名值。
s105,接收接口提供方所發(fā)送的驗證結(jié)果,該驗證結(jié)果由接口提供方比對第一簽名值和第二簽名值所得。
接口提供方生成第二簽名值之后,會將該第二簽名值與接口提供方所生成的第一簽名值進(jìn)行比對,若比對出兩者一致,則說明接口調(diào)用方的請求在從接口調(diào)用方傳送至接口提供方的過程中未被篡改,接口調(diào)用方的請求合法,通過驗證;若比對出兩者不一致,則說明接口調(diào)用方的請求在從接口調(diào)用方傳送至接口提供方的過程中可能已經(jīng)被篡改,接口調(diào)用方的請求不合法,不通過驗證。
本發(fā)明實施例,先基于應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳得到第一簽名值及第二簽名值,再通過比對第一簽名值及第二簽名值以得到驗證結(jié)果,提高了簽名驗證和數(shù)據(jù)交互的安全性。
請參考圖2,是本發(fā)明第二實施例提供的簽名驗證方法的示意流程圖,如圖所示,該方法可包括以下步驟:
s201,獲取應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳。
接口調(diào)用方獲取api接口請求參數(shù)(即應(yīng)用程序接口請求參數(shù))及當(dāng)前時間戳。其中,接口調(diào)用方可獲取本身的系統(tǒng)時間以作為當(dāng)前時間戳,也可以獲取當(dāng)前網(wǎng)絡(luò)時間以作為當(dāng)前時間戳。在本實施例中,接口調(diào)用方指的是客戶端,接口提供方指的是服務(wù)器,但不以此為限。
舉例來說,所獲取的api接口請求參數(shù)包括a=1,m=2,c=3,所獲取的當(dāng)前時間戳timestamp=1486695218。
s202,根據(jù)應(yīng)用程序接口請求參數(shù)生成初始簽名。
接口調(diào)用方對api接口請求參數(shù)a=1,m=2,c=3作字典升序排列,得到新的api接口請求參數(shù)a=1,c=3,m=2。將該新的api接口請求參數(shù)的參數(shù)名a、c、m及參數(shù)值1、3、2進(jìn)行拼接得到簽名原文a1c3m2。之后,采用md5算法對簽名原文a1c3m2進(jìn)行加密得到32位字長的初始簽名5fbc803b084ea0036d30250f93130bc3。
s203,截取當(dāng)前時間戳的后三位數(shù)值以得到初始時變量,該初始時變量包括初始鍵名和初始鍵值。
接口調(diào)用方截取當(dāng)前時間戳后三位數(shù)值,其中,最后一位數(shù)值標(biāo)記為x,倒數(shù)第二位數(shù)值標(biāo)記為y,倒數(shù)第三位數(shù)值標(biāo)記為z,將該后三位數(shù)值轉(zhuǎn)換成int類型的變量,并組成關(guān)聯(lián)數(shù)組a,數(shù)據(jù)結(jié)構(gòu)為a[0]=x、a[1]=y(tǒng)、a[2]=z,即所得到的初始時變量為a[0]=x、a[1]=y(tǒng)、a[2]=z。該初始時變量包括初始鍵名(如0、1、2)和初始鍵值(如x、y、z)。本實施例中,根據(jù)當(dāng)前時間戳timestamp=1486695218可得到的初始時變量是a[0]=8、a[1]=1、a[2]=2。
s204,根據(jù)初始鍵值計算目標(biāo)鍵名。
具體地,將a[0]數(shù)值作為a[0]的鍵名,將a[0]和a[1]相加的和作為a[1]的鍵名,將a[0],a[1]和a[2]相加的和作為a[2]的鍵名。本實施例中,重新計算得到的目標(biāo)鍵名是8、9、11,即鍵名由0、1、2變更為8、9、11。
s205,根據(jù)目標(biāo)鍵名確定目標(biāo)時變量。
根據(jù)目標(biāo)鍵名是8、9、11確定出目標(biāo)時變量:a[8]=8、a[9]=1、a[11]=2。
s206,根據(jù)目標(biāo)時變量對初始簽名進(jìn)行替換處理以得到第一簽名值。
根據(jù)上面的三個目標(biāo)時變量a[8]=8、a[9]=1、a[11]=2,對初始簽名5fbc803b084ea0036d30250f93130bc3進(jìn)行替換。那么初始簽名的第8位數(shù)值b替換成8,第9位數(shù)值0替換成1,第11位數(shù)值4替換成2,得出第一簽名值為5fbc8038182ea0036d30250f93130bc3。
s207,根據(jù)應(yīng)用程序接口請求參數(shù)、當(dāng)前時間戳及第一簽名值構(gòu)造目標(biāo)請求。
接口調(diào)用方將當(dāng)前時間戳和第一簽名值加入api接口請求參數(shù)中,從而得到目標(biāo)請求。需要說明的是,該目標(biāo)請求包括但不僅限于http請求、https請求、tcp/ip請求及socket請求等。
s208,將目標(biāo)請求發(fā)送至接口提供方,以使接口提供方根據(jù)目標(biāo)請求生成第二簽名值。
接口調(diào)用方將目標(biāo)請求發(fā)送至接口提供方,接口提供方接收該目標(biāo)請求。該接口提供方先對目標(biāo)請求中的api接口請求參數(shù)做字典升序排列,再根據(jù)api接口請求參數(shù)的參數(shù)值和參數(shù)名生成簽名原文,最后采用md5等加密算法對簽名原文進(jìn)行加密以得到初始簽名。之后,接口提供方會根據(jù)目標(biāo)請求中的當(dāng)前時間戳對初始簽名sign2進(jìn)行替換處理以得到第二簽名值。具體過程請參考步驟s203至s206。
s209,接收接口提供方所發(fā)送的驗證結(jié)果,該驗證結(jié)果由接口提供方比對第一簽名值和第二簽名值所得。
接口提供方生成第二簽名值之后,會將該第二簽名值與接口提供方所生成的第一簽名值進(jìn)行比對,若比對出兩者一致,則說明接口調(diào)用方的請求在從接口調(diào)用方傳送至接口提供方的過程中未被篡改,接口調(diào)用方的請求合法,通過驗證;若比對出兩者不一致,則說明接口調(diào)用方的請求在從接口調(diào)用方傳送至接口提供方的過程中可能已經(jīng)被篡改,接口調(diào)用方的請求不合法,不通過驗證。
本發(fā)明實施例,基于應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳生成第一簽名值及第二簽名值,具體生成第一簽名值及第二簽名值時,對初始簽名的替換位置和數(shù)值隨時間戳的變化而變化,變化規(guī)律復(fù)雜,具有很強的動態(tài)性,幾乎不能被暴力破解。此外,本發(fā)明實施例放棄了傳統(tǒng)密鑰簽名方式,避免了因密鑰泄露而導(dǎo)致的數(shù)據(jù)外泄風(fēng)險。另外,本發(fā)明實施例在生成初始簽名時,采用了md5算法,由于md5算法的通用性,使得本發(fā)明實施例的簽名驗證方法更能被廣泛地應(yīng)用;且,最終得到的第一簽名值及第二簽名值仍保留原有md5生成簽名的數(shù)據(jù)結(jié)構(gòu),仍屬于標(biāo)準(zhǔn)的md5加密簽名形式,這對于接口提供方和調(diào)用方以外的第三方來說具有強烈的迷惑性。由于md5加密簽名的特性,一旦簽名發(fā)生變化,其映射的原數(shù)據(jù)毫無關(guān)聯(lián)性。因此即使簽名被傳統(tǒng)的md5解密方式破解,得到的參數(shù)結(jié)果與本接口參數(shù)一點關(guān)聯(lián)性都沒有,破解的結(jié)果也毫無意義。綜上,本發(fā)明實施例提高了簽名驗證和數(shù)據(jù)交互的安全性。
請參考圖3,是本發(fā)明第三實施例提供的簽名驗證方法的示意流程圖,如圖所示,該方法可包括以下步驟:
s301,接收接口調(diào)用方所發(fā)送的目標(biāo)請求。
該目標(biāo)請求由接口調(diào)用方的應(yīng)用程序接口請求參數(shù)、接口調(diào)用方的第一簽名值及當(dāng)前時間戳所得,第一簽名值由應(yīng)用程序接口請求參數(shù)和當(dāng)前時間戳所得。
當(dāng)兩個終端需要進(jìn)行數(shù)據(jù)交互時,通常需要先對應(yīng)用程序編程接口(applicationprogramminginterface,api)進(jìn)行簽名驗證。該兩個終端一般稱為接口調(diào)用方和接口提供方。該接口調(diào)用方或接口提供方可以但不僅限于客戶端或服務(wù)器端或第三方。在本實施例中,接口調(diào)用方指的是客戶端,接口提供方指的是服務(wù)器,但不以此為限。
接口調(diào)用方先獲取程序接口請求參數(shù)及當(dāng)前時間戳,再根據(jù)應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳得到第一簽名值,之后根據(jù)應(yīng)用程序接口請求參數(shù)、當(dāng)前時間戳以及第一簽名值構(gòu)造目標(biāo)請求,最后將將目標(biāo)請求發(fā)送至接口提供方。接口提供方接收該目標(biāo)請求。需要說明的是,接口調(diào)用方構(gòu)造目標(biāo)請求的具體過程請參考本發(fā)明第一實施例中的步驟s101至s103。
s302,根據(jù)目標(biāo)請求中的應(yīng)用程序接口請求參數(shù)和當(dāng)前時間戳得到第二簽名值。
接口提供方先對目標(biāo)請求中的api接口請求參數(shù)做字典升序排列,再根據(jù)api接口請求參數(shù)的參數(shù)值和參數(shù)名生成簽名原文,最后采用md5等加密算法對簽名原文進(jìn)行加密以得到初始簽名。其中,該初始簽名可以是32位字長的。需要說明的是,上述得到初始簽名的方法僅是示例性的,并不以此為限。接口提供方得到初始簽名之后,會根據(jù)目標(biāo)請求中的當(dāng)前時間戳對初始簽名進(jìn)行替換處理以得到第二簽名值。
s303,比對第一簽名值及第二簽名值以得到驗證結(jié)果。
接口提供方生成第二簽名值之后,會將該第二簽名值與接口提供方所生成的第一簽名值進(jìn)行比對,若比對出兩者一致,則說明接口調(diào)用方的請求在從接口調(diào)用方傳送至接口提供方的過程中未被篡改,接口調(diào)用方的請求合法,通過驗證;若比對出兩者不一致,則說明接口調(diào)用方的請求在從接口調(diào)用方傳送至接口提供方的過程中可能已經(jīng)被篡改,接口調(diào)用方的請求不合法,不通過驗證。
本發(fā)明實施例,先基于應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳得到第一簽名值及第二簽名值,再通過比對第一簽名值及第二簽名值以得到驗證結(jié)果,提高了簽名驗證和數(shù)據(jù)交互的安全性。
請參考圖4,是本發(fā)明第四實施例提供的簽名驗證方法的示意流程圖,如圖所示,該方法可包括以下步驟:
s401,接收接口調(diào)用方所發(fā)送的目標(biāo)請求。
該目標(biāo)請求由接口調(diào)用方的應(yīng)用程序接口請求參數(shù)、接口調(diào)用方的第一簽名值及當(dāng)前時間戳所得,第一簽名值由應(yīng)用程序接口請求參數(shù)和當(dāng)前時間戳所得。
接口調(diào)用方先獲取程序接口請求參數(shù)及當(dāng)前時間戳,再根據(jù)應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳得到第一簽名值,之后根據(jù)應(yīng)用程序接口請求參數(shù)、當(dāng)前時間戳以及第一簽名值構(gòu)造目標(biāo)請求,最后將將目標(biāo)請求發(fā)送至接口提供方。接口提供方接收該目標(biāo)請求。需要說明的是,接口調(diào)用方構(gòu)造目標(biāo)請求的具體過程請參考本發(fā)明第一實施例中的步驟s101至s103。
s402,根據(jù)應(yīng)用程序接口請求參數(shù)生成初始簽名。
若目標(biāo)請求中包括的api接口請求參數(shù)為a=1,m=2,c=3。接口提供方對api接口請求參數(shù)a=1,m=2,c=3作字典升序排列,得到新的api接口請求參數(shù)a=1,c=3,m=2。將該新的api接口請求參數(shù)的參數(shù)名a、c、m及參數(shù)值1、3、2進(jìn)行拼接得到簽名原文a1c3m2。之后,采用md5算法對簽名原文a1c3m2進(jìn)行加密得到32位字長的初始簽名5fbc803b084ea0036d30250f93130bc3。
s403,截取當(dāng)前時間戳的后三位數(shù)值以得到初始時變量,該初始時變量包括初始鍵名和初始鍵值。
接口提供方截取當(dāng)前時間戳后三位數(shù)值,其中,最后一位數(shù)值標(biāo)記為x,倒數(shù)第二位數(shù)值標(biāo)記為y,倒數(shù)第三位數(shù)值標(biāo)記為z,將該后三位數(shù)值轉(zhuǎn)換成int類型的變量,并組成關(guān)聯(lián)數(shù)組a,數(shù)據(jù)結(jié)構(gòu)為a[0]=x、a[1]=y(tǒng)、a[2]=z,即所得到的初始時變量為a[0]=x、a[1]=y(tǒng)、a[2]=z。該初始時變量包括初始鍵名(如0、1、2)和初始鍵值(如x、y、z)。若目標(biāo)請求中包括的當(dāng)前時間戳為timestamp=1486695218可得到的初始時變量是a[0]=8、a[1]=1、a[2]=2。
s404,根據(jù)初始鍵值計算目標(biāo)鍵名。
具體地,將a[0]數(shù)值作為a[0]的鍵名,將a[0]和a[1]相加的和作為a[1]的鍵名,將a[0],a[1]和a[2]相加的和作為a[2]的鍵名。本實施例中,重新計算得到的目標(biāo)鍵名是8、9、11,即鍵名由0、1、2變更為8、9、11。
s405,根據(jù)目標(biāo)鍵名確定目標(biāo)時變量。
根據(jù)目標(biāo)鍵名是8、9、11確定出目標(biāo)時變量:a[8]=8、a[9]=1、a[11]=2。
s406,根據(jù)目標(biāo)時變量對初始簽名進(jìn)行替換處理以得到第二簽名值。
根據(jù)上面的三個目標(biāo)時變量a[8]=8、a[9]=1、a[11]=2,對初始簽名5fbc803b084ea0036d30250f93130bc3進(jìn)行替換。那么初始簽名的第8位數(shù)值b替換成8,第9位數(shù)值0替換成1,第11位數(shù)值4替換成2,得出第二簽名值為5fbc8038182ea0036d30250f93130bc3。
s407,比對第一簽名值及第二簽名值以得到驗證結(jié)果。
接口提供方生成第二簽名值之后,會將該第二簽名值與接口提供方所生成的第一簽名值進(jìn)行比對,若比對出兩者一致,則說明接口調(diào)用方的請求在從接口調(diào)用方傳送至接口提供方的過程中未被篡改,接口調(diào)用方的請求合法,通過驗證;若比對出兩者不一致,則說明接口調(diào)用方的請求在從接口調(diào)用方傳送至接口提供方的過程中可能已經(jīng)被篡改,接口調(diào)用方的請求不合法,不通過驗證。
本發(fā)明實施例,基于應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳生成第一簽名值及第二簽名值,具體生成第一簽名值及第二簽名值時,對初始簽名的替換位置和數(shù)值隨時間戳的變化而變化,變化規(guī)律復(fù)雜,具有很強的動態(tài)性,幾乎不能被暴力破解。此外,本發(fā)明實施例放棄了傳統(tǒng)密鑰簽名方式,避免了因密鑰泄露而導(dǎo)致的數(shù)據(jù)外泄風(fēng)險。另外,本發(fā)明實施例在生成初始簽名時,采用了md5算法,由于md5算法的通用性,使得本發(fā)明實施例的簽名驗證方法更能被廣泛地應(yīng)用;且,最終得到的第一簽名值及第二簽名值仍保留原有md5生成簽名的數(shù)據(jù)結(jié)構(gòu),仍屬于標(biāo)準(zhǔn)的md5加密簽名形式,這對于接口提供方和調(diào)用方以外的第三方來說具有強烈的迷惑性。由于md5加密簽名的特性,一旦簽名發(fā)生變化,其映射的原數(shù)據(jù)毫無關(guān)聯(lián)性。因此即使簽名被傳統(tǒng)的md5解密方式破解,得到的參數(shù)結(jié)果與本接口參數(shù)一點關(guān)聯(lián)性都沒有,破解的結(jié)果也毫無意義。綜上,本發(fā)明實施例提高了簽名驗證和數(shù)據(jù)交互的安全性。
請參考圖5,是本發(fā)明第五實施例提供的簽名驗證方法的示意流程圖,如圖所示,該方法可包括以下步驟:
s501,接口調(diào)用方獲取應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳。
s502,接口調(diào)用方根據(jù)應(yīng)用程序接口請求參數(shù)生成初始簽名。
s503,接口調(diào)用方截取當(dāng)前時間戳的后三位數(shù)值以得到初始時變量。
s504,接口調(diào)用方根據(jù)初始時變量確定目標(biāo)時變量。
s505,接口調(diào)用方根據(jù)目標(biāo)時變量對初始簽名進(jìn)行替換處理以得到第一簽名值。
s506,接口調(diào)用方根據(jù)應(yīng)用程序接口請求參數(shù)、當(dāng)前時間戳及第一簽名值構(gòu)造目標(biāo)請求。
s507,接口調(diào)用方將目標(biāo)請求發(fā)送至接口提供方。
s508,接口提供方接收接口調(diào)用方所發(fā)送的目標(biāo)請求。
s509,接口提供方根據(jù)目標(biāo)請求中的應(yīng)用程序接口請求參數(shù)和當(dāng)前時間戳得到第二簽名值。
s510,接口提供方比對第一簽名值及第二簽名值以得到驗證結(jié)果。
需要說明的是,步驟s501至s508的具體過程請參考第二實施例中的步驟s201至s208,步驟s509至s511的具體過程請參考步驟s401至s407。
本發(fā)明實施例,基于應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳生成第一簽名值及第二簽名值,具體生成第一簽名值及第二簽名值時,對初始簽名的替換位置和數(shù)值隨時間戳的變化而變化,變化規(guī)律復(fù)雜,具有很強的動態(tài)性,幾乎不能被暴力破解。此外,本發(fā)明實施例放棄了傳統(tǒng)密鑰簽名方式,避免了因密鑰泄露而導(dǎo)致的數(shù)據(jù)外泄風(fēng)險。另外,本發(fā)明實施例在生成初始簽名時,采用了md5算法,由于md5算法的通用性,使得本發(fā)明實施例的簽名驗證方法更能被廣泛地應(yīng)用;且,最終得到的第一簽名值及第二簽名值仍保留原有md5生成簽名的數(shù)據(jù)結(jié)構(gòu),仍屬于標(biāo)準(zhǔn)的md5加密簽名形式,這對于接口提供方和調(diào)用方以外的第三方來說具有強烈的迷惑性。由于md5加密簽名的特性,一旦簽名發(fā)生變化,其映射的原數(shù)據(jù)毫無關(guān)聯(lián)性。因此即使簽名被傳統(tǒng)的md5解密方式破解,得到的參數(shù)結(jié)果與本接口參數(shù)一點關(guān)聯(lián)性都沒有,破解的結(jié)果也毫無意義。綜上,本發(fā)明實施例提高了簽名驗證和數(shù)據(jù)交互的安全性。
請參考圖6,是本發(fā)明第一實施例提供的簽名驗證終端的示意結(jié)構(gòu)圖,如圖所示,該終端可以包括:
獲取單元10,用于獲取應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳;
處理單元11,用于根據(jù)應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳得到第一簽名值;
構(gòu)造單元12,用于根據(jù)應(yīng)用程序接口請求參數(shù)、當(dāng)前時間戳及第一簽名值構(gòu)造目標(biāo)請求;
發(fā)送單元13,用于將目標(biāo)請求發(fā)送至接口提供方,以使接口提供方根據(jù)目標(biāo)請求生成第二簽名值;
接收單元14,用于接收接口提供方所發(fā)送的驗證結(jié)果,驗證結(jié)果由接口提供方比對第一簽名值和第二簽名值所得。
作為一種可選的實施方式,處理單元11具體用于:
根據(jù)應(yīng)用程序接口請求參數(shù)生成初始簽名;
根據(jù)當(dāng)前時間戳確定目標(biāo)時變量;
根據(jù)目標(biāo)時變量對初始簽名進(jìn)行替換處理以得到第一簽名值。
作為一種可選的實施方式,處理單元11具體用于:
截取當(dāng)前時間戳的后三位數(shù)值以得到初始時變量,初始時變量包括初始鍵名和初始鍵值;
根據(jù)初始鍵值計算目標(biāo)鍵名;
根據(jù)目標(biāo)鍵名確定目標(biāo)時變量。
本發(fā)明實施例,基于應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳生成第一簽名值及第二簽名值,具體生成第一簽名值及第二簽名值時,對初始簽名的替換位置和數(shù)值隨時間戳的變化而變化,變化規(guī)律復(fù)雜,具有很強的動態(tài)性,幾乎不能被暴力破解。此外,本發(fā)明實施例放棄了傳統(tǒng)密鑰簽名方式,避免了因密鑰泄露而導(dǎo)致的數(shù)據(jù)外泄風(fēng)險。另外,本發(fā)明實施例在生成初始簽名時,采用了md5算法,由于md5算法的通用性,使得本發(fā)明實施例的簽名驗證方法更能被廣泛地應(yīng)用;且,最終得到的第一簽名值及第二簽名值仍保留原有md5生成簽名的數(shù)據(jù)結(jié)構(gòu),仍屬于標(biāo)準(zhǔn)的md5加密簽名形式,這對于接口提供方和調(diào)用方以外的第三方來說具有強烈的迷惑性。由于md5加密簽名的特性,一旦簽名發(fā)生變化,其映射的原數(shù)據(jù)毫無關(guān)聯(lián)性。因此即使簽名被傳統(tǒng)的md5解密方式破解,得到的參數(shù)結(jié)果與本接口參數(shù)一點關(guān)聯(lián)性都沒有,破解的結(jié)果也毫無意義。綜上,本發(fā)明實施例提高了簽名驗證和數(shù)據(jù)交互的安全性。
請參考圖7,是本發(fā)明第二實施例提供的簽名驗證終端的示意結(jié)構(gòu)圖,如圖所示,該終端可以包括:
接收單元20,用于接收接口調(diào)用方所發(fā)送的目標(biāo)請求,該目標(biāo)請求中的請求參數(shù)由接口調(diào)用方的應(yīng)用程序接口請求參數(shù)、接口調(diào)用方的第一簽名值及當(dāng)前時間戳所得,該第一簽名值由應(yīng)用程序接口請求參數(shù)和當(dāng)前時間戳所得;
處理單元21,用于根據(jù)目標(biāo)請求中的應(yīng)用程序接口請求參數(shù)和當(dāng)前時間戳得到第二簽名值;
比對單元22,用于比對第一簽名值及第二簽名值以得到驗證結(jié)果。
作為一種可選的實施方式,處理單元21具體用于:
根據(jù)應(yīng)用程序接口請求參數(shù)生成初始簽名;
根據(jù)當(dāng)前時間戳確定目標(biāo)時變量;
根據(jù)目標(biāo)時變量對初始簽名進(jìn)行替換處理以得到第二簽名值。
作為一種可選的實施方式,處理單元21具體用于:
截取當(dāng)前時間戳的后三位數(shù)值以得到初始時變量,初始時變量包括初始鍵名和初始鍵值;
根據(jù)初始鍵值計算目標(biāo)鍵名;
根據(jù)目標(biāo)鍵名值確定目標(biāo)時變量。
本發(fā)明實施例,基于應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳生成第一簽名值及第二簽名值,具體生成第一簽名值及第二簽名值時,對初始簽名的替換位置和數(shù)值隨時間戳的變化而變化,變化規(guī)律復(fù)雜,具有很強的動態(tài)性,幾乎不能被暴力破解。此外,本發(fā)明實施例放棄了傳統(tǒng)密鑰簽名方式,避免了因密鑰泄露而導(dǎo)致的數(shù)據(jù)外泄風(fēng)險。另外,本發(fā)明實施例在生成初始簽名時,采用了md5算法,由于md5算法的通用性,使得本發(fā)明實施例的簽名驗證方法更能被廣泛地應(yīng)用;且,最終得到的第一簽名值及第二簽名值仍保留原有md5生成簽名的數(shù)據(jù)結(jié)構(gòu),仍屬于標(biāo)準(zhǔn)的md5加密簽名形式,這對于接口提供方和調(diào)用方以外的第三方來說具有強烈的迷惑性。由于md5加密簽名的特性,一旦簽名發(fā)生變化,其映射的原數(shù)據(jù)毫無關(guān)聯(lián)性。因此即使簽名被傳統(tǒng)的md5解密方式破解,得到的參數(shù)結(jié)果與本接口參數(shù)一點關(guān)聯(lián)性都沒有,破解的結(jié)果也毫無意義。綜上,本發(fā)明實施例提高了簽名驗證和數(shù)據(jù)交互的安全性。
需要說明的是,本發(fā)明實施例終端的具體工作流程已在前述的方法部分做了詳述,在此不再贅述。
參考圖8,是本發(fā)明第三實施例提供的一種終端的結(jié)構(gòu)示意圖。如圖所示,該終端包括:至少一個處理器301,例如cpu,至少一個用戶接口303,存儲器304,至少一個通信總線302。其中,通信總線302用于實現(xiàn)這些組件之間的連接通信。其中,用戶接口303可以包括顯示屏(display)、鍵盤(keyboard),可選用戶接口303還可以包括標(biāo)準(zhǔn)的有線接口、無線接口。存儲器304可以是高速ram存儲器,也可以是非不穩(wěn)定的存儲器(non-volatilememory),例如至少一個磁盤存儲器。存儲器304可選的還可以是至少一個位于遠(yuǎn)離前述處理器301的存儲裝置。其中處理器301可以結(jié)合圖6至7所描述的終端,存儲器304中存儲一組程序代碼,且處理器301調(diào)用存儲器304中存儲的程序代碼,用于執(zhí)行以下操作:
獲取應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳;
根據(jù)應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳得到第一簽名值;
根據(jù)應(yīng)用程序接口請求參數(shù)、當(dāng)前時間戳及第一簽名值構(gòu)造目標(biāo)請求;
將目標(biāo)請求發(fā)送至接口提供方,以使接口提供方根據(jù)目標(biāo)請求生成第二簽名值;
接收接口提供方所發(fā)送的驗證結(jié)果,該驗證結(jié)果由接口提供方比對第一簽名值和第二簽名值所得。
作為一種可選的實施方式,處理器301調(diào)用存儲器304中存儲的程序代碼,用于執(zhí)行以下操作:
根據(jù)應(yīng)用程序接口請求參數(shù)生成初始簽名;
根據(jù)當(dāng)前時間戳確定目標(biāo)時變量;
根據(jù)目標(biāo)時變量對初始簽名進(jìn)行替換處理以得到第一簽名值。
作為一種可選的實施方式,處理器301調(diào)用存儲器304中存儲的程序代碼,用于執(zhí)行以下操作:
截取當(dāng)前時間戳的后三位數(shù)值以得到初始時變量,初始時變量包括初始鍵名和初始鍵值;
根據(jù)初始鍵值計算目標(biāo)鍵名;
根據(jù)目標(biāo)鍵名值確定目標(biāo)時變量。
作為一種可選的實施方式,處理器301調(diào)用存儲器304中存儲的程序代碼,用于執(zhí)行以下操作:
接收接口調(diào)用方所發(fā)送的目標(biāo)請求,該目標(biāo)請求中的請求參數(shù)由接口調(diào)用方的應(yīng)用程序接口請求參數(shù)、接口調(diào)用方的第一簽名值及當(dāng)前時間戳所得,該第一簽名值由應(yīng)用程序接口請求參數(shù)和當(dāng)前時間戳所得;
根據(jù)目標(biāo)請求中的應(yīng)用程序接口請求參數(shù)和當(dāng)前時間戳得到第二簽名值;
比對第一簽名值及第二簽名值以得到驗證結(jié)果。
作為一種可選的實施方式,處理器301調(diào)用存儲器304中存儲的程序代碼,用于執(zhí)行以下操作:
根據(jù)應(yīng)用程序接口請求參數(shù)生成初始簽名;
根據(jù)當(dāng)前時間戳確定目標(biāo)時變量;
根據(jù)目標(biāo)時變量對初始簽名進(jìn)行替換處理以得到第二簽名值。
本發(fā)明實施例,先基于應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳得到第一簽名值及第二簽名值,再通過比對第一簽名值及第二簽名值以得到驗證結(jié)果,提高了簽名驗證和數(shù)據(jù)交互的安全性。
請參考圖9,是本發(fā)明第一實施例提供的簽名驗證系統(tǒng)的示意結(jié)構(gòu)圖,如圖所示,該系統(tǒng)可以包括第一終端100及第二終端200。其中,第一終端100的具體結(jié)構(gòu)及其功能請參考如圖6所述的終端,第二終端200的具體結(jié)構(gòu)及功能請參考如圖7所述的終端。
本發(fā)明實施例,先基于應(yīng)用程序接口請求參數(shù)及當(dāng)前時間戳得到第一簽名值及第二簽名值,再通過比對第一簽名值及第二簽名值以得到驗證結(jié)果,提高了簽名驗證和數(shù)據(jù)交互的安全性。
本領(lǐng)域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
此外,在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的方法、終端和系統(tǒng),可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另外,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口、裝置或單元的間接耦合或通信連接,也可以是電的,機械的或其它的形式連接。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本發(fā)明實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以是兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
本發(fā)明實施例方法中的步驟可以根據(jù)實際需要進(jìn)行順序調(diào)整、合并和刪減。
本發(fā)明實施例終端中的單元可以根據(jù)實際需要進(jìn)行合并、劃分和刪減。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到各種等效的修改或替換,這些修改或替換都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)以權(quán)利要求的保護范圍為準(zhǔn)。