【问题标题】:HMAC and SHA256 - how to validate using nonceHMAC 和 SHA256 - 如何使用 nonce 进行验证
【发布时间】:2017-11-16 15:40:51
【问题描述】:

我正在尝试与 Web API 集成。看看他们如何使用 SHA256 和 HMAC 来生成他们的签名。然而,他们也使用所谓的“nonce”,我必须查一下。这个 api 使用我们都知道的秘密和请求的 url 生成“签名”。

那么,我是否使用他们用来在我端生成签名的相同 nonce 来进行验证?

我正在查看他们如何在客户端生成这样的签名的示例。

        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 的用途相同。

我错过了什么?

【问题讨论】:

    标签: javascript sha256 hmac


    【解决方案1】:

    我从http://www.freeformatter.com/hmac-generator.html 得到的输出是十六进制编码的,而您提供的值 (ihyCCfTHog7TDQYT4tQM5ISYSjEIaChSeJmIo3UMa+U=) 是base64 编码的。

    如果您解码 base64 编码的消息,请将其转换为十六进制并将其与 freeformatter 的结果(即8a1c8209f4c7a20ed30d0613e2d40ce484984a3108682852789988a3750c6be5)进行比较 - 它们都匹配。您可能对 https://stackoverflow.com/a/12987042/3906760 感兴趣,了解转换功能。

    是的:您计算两侧的 HMAC 并比较结果。如果它匹配(没有其他人知道这个秘密)你是安全的。

    nonce 是一个随机值,以防止重放攻击(参见https://en.wikipedia.org/wiki/Cryptographic_nonce)。

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 2022-06-18
      • 1970-01-01
      • 2020-11-02
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 2020-07-11
      相关资源
      最近更新 更多