因为你这样做:
timestamp := time.Now().Unix()
log.Print(fmt.Sprintf("%x", sha256.Sum256([]byte(string(timestamp))))[:45])
您打印数据的 SHA-256 摘要的十六进制形式:
[]byte(string(timestamp))
究竟是什么?
timestamp 的类型为 int64,converting it to string is:
将有符号或无符号整数值转换为字符串类型会生成一个包含整数的 UTF-8 表示形式的字符串。超出有效 Unicode 代码点范围的值将转换为“\uFFFD”。
但它的值不是有效的 unicode 代码点,因此它将始终为 "\uFFFD",即 efbfbd(UTF-8 编码),并且您的代码始终打印数据 []byte{0xef, 0xbf, 0xbd} 的 SHA-256,即(或者更确切地说是它的前 45 个十六进制数字,因为您对结果进行了切片):
83d544ccc223c057d2bf80d3f2a32982c32c3c0db8e26
我猜你想生成一些随机字节并计算其 SHA-256,如下所示:
data := make([]byte, 10)
for i := range data {
data[i] = byte(rand.Intn(256))
}
fmt.Printf("%x", sha256.Sum256(data))
请注意,如果您使用crypto/rand 包而不是math/rand,则可以使用rand.Read() 函数用随机值填充一个字节片,并且您甚至不必设置种子(和所以你甚至不需要time 包):
data := make([]byte, 10)
if _, err := rand.Read(data); err == nil {
fmt.Printf("%x", sha256.Sum256(data))
}