開放平台簽名驗籤方案

2021-09-26 09:14:57 字數 1388 閱讀 3076

引數名

型別含義

string

nonce

string

隨機字串,每次請求重新生成,隨機性越大越好,32byte以內,a-za-z0-9,例如:d15d792875807b0fec620f4db2ac1667

timestamp

string

unix時間戳(毫秒級),每次請求重新生成,例如:1533203363618

sigstring

簽名結果,對除sig以外其他引數進行計算的值,每次請求都需重新生成,生成的sig全為小寫

篩選引數並排序

獲取sig欄位以外的所有請求引數原始值(注意:簽名階段不要對引數值做處理,比如不能進行urlencode編碼,在請求的過程時可以進行urlencode編碼,如傳輸json時的url編碼),並按照第乙個字元的鍵值ascii碼遞增排序(字母公升序排序),如果遇到相同字元則按照第二個字元的鍵值ascii碼遞增排序,以此類推。

將排序後的引數與其對應的值,組合成「引數=引數值」的格式,並把引數用『&』符號連線起來,此時生成的字串為待簽名字串,例如字串名稱為paramstr。

1533203363618

&...

&key=value&

...將帶簽名字串進行base64編碼(注意base64編碼的字符集為utf8),例如得到的字串為base64paramsstr。

base64paramsstr = buffer.

from

('步驟2所得字串').

tostring

('base64'

);

sha256result = crypto.

createhmac

('sha256'

.update

(base64paramsstr)

.digest()

;

對得到的sha256result進行md5的計算的到32位小寫字串作為sig。

sig = crypto.

createhash

('md5').

update

(sha256result)

.digest

('hex').

tolowercase()

;

將sig拼接在其他請求引數的末尾傳送

//url

...&

...&sig=***

//body

將前端所傳的引數去掉sig引數,進行如客戶端簽名方式一致的簽名,驗證客戶端所傳sig是否一致。

ECDSA簽名 驗籤

ecdsa簽名每次結果不同。原因 ecdsa簽名過程中混入隨機值,生成簽名結果不同。公鑰證書驗籤沒問題。1.簽名過程 假設要簽名的訊息是乙個字串 hello world dsa簽名的第乙個步驟是對待簽名的訊息生成乙個訊息摘要。不同的簽名演算法使用不同的訊息摘要演算法。比如,dss使用sha1來生成1...

加密解密 簽名驗籤

幾個基本概念 加密 傳送方利用接收方的公鑰對要傳送的明文進行加密。解密 接受方利用自己的私鑰進行解密。公鑰和私鑰配對的,用公鑰加密的檔案,只有對應的私鑰才能解密。當然也可以反過來,用私鑰加密,用對應的公鑰進行解密。簽名 傳送方用乙個雜湊函式從報文文字中生成報文摘要,然後用自己的私人金鑰對這個摘要進行...

RSA簽名與驗籤

rsa演算法除了可以進行加解密以外,還可以用來簽名與驗籤。rsa用來進行簽名與驗簽時是使用私鑰進行簽名,公鑰進行驗籤的。這點與加解密的時候剛好相反。加解密時使用公鑰加密,私鑰解密。簽名和驗籤是通過signature物件進行的。以下是乙個使用signature進行簽名的示例。初始化signature時...