2017-06-14 143 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)。