想要把一个字符串经过 SHA256 哈希后,
package main
import (
"crypto/sha256"
"fmt"
)
func main() {
h := sha256.New()
h.Write([]byte("hello world\n"))
fmt.Printf("%x", h.Sum(nil)) // 这句话是什么意思?
}
请问下,
- h.Sum(nil) 这句话是什么意思?
- 最后得到的哈希值是一串数字吗,这里用 []unit8 数组表示吗?
Q: h.Sum(nil) 这句话是什么意思?
A: 就是计算哈希值的意思,括号中间的参数一般都传 nil 不用管它。
Q: 最后得到的哈希值是一串数字吗,这里用 []unit8 数组表示吗?
A: SHA-256 是一种哈希算法,返回的结果是 256 位,也就是 32 个字节(1个字节=8个二进制位)。所以 h.Sum(nil) 最终返回的是一个长度位 32 的 []byte 。
但是为了看起来方便,通常会使用 HEX 编码(16 进制的编码方式,所以又称为 Base16)将这个 32 的 []byte 转成一个 64 位长度的字符串,使用 0-9 和 a-e 这 16 个字符。
%x 就用于将一个 []byte 转成 base 16 编码的字符串。
更多编码和哈希相关的问题可以参考我的Blog: https://xxgblog.com/2021/11/3...