博客 / 詳情

返回

Go語言中實現HmacSHA256加密算法

HmacSHA256加密算法比較常用的加密算法之一,它比MD5更加安全。HmacSHA256也是微信支付推薦的加密方式。

在Go語言中實現HmacSHA256還是比較簡單的,雖然沒有PHPhash_hmac一個函數搞定的方式簡單,但比起Java中的實現還是簡單不少。

package main

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

// HmacSha256 計算HmacSha256
// key 是加密所使用的key
// data 是加密的內容
func HmacSha256(key string, data string) []byte {
    mac := hmac.New(sha256.New, []byte(key))
    _, _ = mac.Write([]byte(data))

    return mac.Sum(nil)
}

// HmacSha256ToHex 將加密後的二進制轉16進制字符串
func HmacSha256ToHex(key string, data string) string {
    return hex.EncodeToString(HmacSha256(key, data))
}

// HmacSha256ToHex 將加密後的二進制轉Base64字符串
func HmacSha256ToBase64(key string, data string) string {
    return base64.URLEncoding.EncodeToString(HmacSha256(key, data))
}

func main() {
    // secret 是加密要使用的key
    // apple 是要加密的內容
    fmt.Printf("HmacSha256轉16字符串: %s\n", HmacSha256ToHex("secret", "apple"))
    fmt.Printf("HmacSha256轉base字符串: %s\n", HmacSha256ToBase64("secret", "apple"))
}

運行結果:

HmacSha256轉16字符串: 37431003b2d14b6bddb9334c7ec2ff0ea0c65f96ec650952384e56cae83c398f
HmacSha256轉base字符串: N0MQA7LRS2vduTNMfsL_DqDGX5bsZQlSOE5Wyug8OY8=

可以看出,HmacSha256加密後是二進制數據,其中包含不可見字符串,不便於傳輸,通常將其轉換為16進制Base64字符串。

最後,推薦一個 golang 的加解密庫:https://github.com/forgoer/openssl,它支持AESDESRSAsha1Hmac-Sha1sha256Hmac-Sha256等常用算法。

user avatar _5efd3fd7ee4bc 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.