代码之家  ›  专栏  ›  技术社区  ›  Gayan Hewa

php和golang中的hmac散列不匹配

  •  0
  • Gayan Hewa  · 技术社区  · 5 年前

    我正在尝试连接到一个api,该api使用过时的hmac哈希身份验证机制。

    例如:

    $signature = hash_hmac('sha256', $string_to_sign, $api_sec);
    

    与Go中生成的版本相比:

    h := hmac.New(sha256.New, []byte(authSecret))
    h.Write([]byte(stringToSign))
    signature := hex.EncodeToString(h.Sum(nil))
    

    当我使用相同的 stringToSign($string_to_sign) 同样 authSecret($api_sec) 使用go生成的签名将导致api的签名无效。但如果我用php函数创建了相同的函数,它就可以正常工作。我有点不知所措。

    0 回复  |  直到 5 年前
        1
  •  1
  •   Luke Joshua Park    5 年前

    输入数据一定有问题。

    使用以下php:

    echo hash_hmac('sha256', 'data', 'key');
    

    下面是:

    h := hmac.New(sha256.New, []byte("key"))
    h.Write([]byte("data"))
    signature := hex.EncodeToString(h.Sum(nil))
    fmt.Println(signature)
    

    我得到了同样的结果 5031fe3d989c6d1537a013fa6e739da23463fdaec3b70137d828e36ace221bd0