2017-06-14 36 views
-1

我試圖與Web API集成。看看他們如何使用SHA256和HMAC來生成他們的簽名。然而,他們也使用被稱爲「隨機數」的東西,我不得不查找。這個api使用我們都知道的祕密,並結合請求的url來生成「簽名」。HMAC和SHA256 - 如何使用隨機數進行驗證

那麼,我是否使用它們用於生成簽名的同一個隨機數來執行驗證?

我正在尋找他們如何在客戶端生成他們的簽名樣本。

 var message = "https://my.server.com/new-callback?reqID=test&nonce=8cf95201-4d3c-4397-9117-d7ee6ad89d93"; 
     var secret = "g394g732vhsdfiv34"; 
     var hash = CryptoJS.HmacSHA256(message, secret); 
     var signature = hash.toString(CryptoJS.enc.Base64); 

result of signature... 


// ihyCCfTHog7TDQYT4tQM5ISYSjEIaChSeJmIo3UMa + U =

不過,我不使用這個工具
http://www.freeformatter.com/hmac-generator.html

得到相同的結果

因此,爲了驗證這一在我結束(API中) ,我需要使用相同的輸入來計算簽名,然後簡單比較結果字符串,是否正確?

此「nonce」組件的用途是什麼?從我讀過的內容來看,它或多或少地起到了與GUID相同的作用。

我錯過了什麼?

回答

1

我從http://www.freeformatter.com/hmac-generator.html獲得的輸出是十六進制編碼,並且您提供的值(ihyCCfTHog7TDQYT4tQM5ISYSjEIaChSeJmIo3UMa+U=)爲base64編碼。

如果您解碼base64編碼的消息,請將其轉換爲十六進制,並將其與來自freeformatter(它是8a1c8209f4c7a20ed30d0613e2d40ce484984a3108682852789988a3750c6be5)的結果進行比較 - 它們都匹配。您可能對https://stackoverflow.com/a/12987042/3906760感興趣轉換功能。

是的:你計算雙方的HMAC並比較結果。如果它匹配(沒有其他人知道這個祕密),你是安全的。

隨機數是一個隨機值,以防止重放攻擊(參見https://en.wikipedia.org/wiki/Cryptographic_nonce)。