乐趣区

关于go: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 等罕用算法。

退出移动版