golang 使用HMAC SHA256创建base64哈希的示例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 使用HMAC SHA256创建base64哈希的示例相关的知识,希望对你有一定的参考价值。

package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/base64"
    "fmt"
)

func ComputeHmac256(message string, secret string) string {
    key := []byte(secret)
    h := hmac.New(sha256.New, key)
    h.Write([]byte(message))
    return base64.StdEncoding.EncodeToString(h.Sum(nil))
}

func main() {
    fmt.Println(ComputeHmac256("Message", "secret"))
}

[Python中具有SHA256的base64 HMAC

我很难创建签名。

我需要使用带有Check256 JSON和密钥的SHA256的HMAC进行签名。我需要通过将签名,竖线字符(|)和Checkout Request JSON串联在一起,然后使用BASE64对其进行编码来实现。

这是我在文档中找到的公式:

$signed_checkout_request = base64( hmac_sha256( $checkout_request, $private_key ) + "|" + $checkout_request )

我已经根据一些在线代码进行了此设置:

    import hashlib
    import hmac
    import base64

    checkout_request = '"charge":"amount":499,"currency":"EUR"'.encode('utf-8');
    private_key = b'44444444444';
    digest = hmac.new(private_key, msg=checkout_request, digestmod=hashlib.sha256).digest()

    signature = base64.b64encode(digest).decode()

但是我不确定如何获得“ |”进去。如果我说实话,我也不确定自己是否走在正确的道路上……我在本节中没有太多经验,我在谷歌搜索中失败了。

答案
private_key = 'blahblahblah'

checkout_request = json.dumps("charge":"amount":4999,"currency":"EUR", sort_keys=True, separators=(",", ":"))

digest = hmac.new(private_key.encode(), msg=checkout_request.encode(), digestmod=hashlib.sha256,).hexdigest()

signature = base64.b64encode((digest + "|" + checkout_request).encode()).decode()

我能够使它与之一起工作:)

以上是关于golang 使用HMAC SHA256创建base64哈希的示例的主要内容,如果未能解决你的问题,请参考以下文章

[Python中具有SHA256的base64 HMAC

hmac sha256和sha256的区别

对于 PBKDF2,使用 HMAC-SHA256 是不是比使用 HMAC-SHA-1 更安全?

在 Ruby 中使用 HMAC SHA256

使用 HMAC-SHA256 的 Python 编码消息

如何在 python 代码中使用 SHA256-HMAC?