本文是stackoverflow上Generating the SHA hash of a string using golang的翻译
如题,如何快速使用go语言生成一个字符串的hash值?可以是base64/十六进制格式
Answers:
- bash64
import (
"crypto/sha1"
"encoding/base64"
)
func storee(bv []byte) {
hasher := sha1.New()
hasher.Write(bv)
sha := base64.URLEncoding.EncodeToString(hasher.Sum(nil))
...
}
- hex
import (
"crypto/sha1"
"encoding/hex"
)
func storee(bv []byte) {
hasher := sha1.New()
hasher.Write(bv)
sha := hex.EncodeToString(hasher.Sum(nil)), nil
...
}
在上面的例子中使用到了byte数组,在go语言中可以通过下面代码生成string字符串的byte数组:
bv := []byte(myString)
当然没有必要一定要使用 bash64/Hexadecimal进行转化, 也可以直接返回原始的hasher.Sum(nil)
生成的字符串数组。
下面是一些关于sha值使用场景的最佳实践:
- 在数据库中存储时使用原始字节数组存储,而不是序列化后的字符串
- 当想要将一个sha值提供给某个用户的时候通常使用其十六进制格式
- 当想使用字符串表示形式时,因为它必须适合 URL 或文件名,建议使用base64格式