gpt4 book ai didi

戈朗 : sha256 returns two different values for the same input

转载 作者:数据小太阳 更新时间:2023-10-29 03:38:25 24 4
gpt4 key购买 nike

我正在努力实现一些需要哈希操作的加密函数(我想计算自定义结构的哈希)所以我想使用 crypto 中的 SHA256 哈希函数 golang 包。但是,我注意到,当我针对同一输入多次运行哈希函数时,有时它会返回不同的值。我的理解是 SHA 函数为单个输入值返回相同的哈希输出。下面是我对哈希函数的实现:

func myHash(s MyStruct) []byte{

bytes := []byte(fmt.Sprintf("%v", s))

h := sha256.New()
h.Write(bytes)

return h.Sum(nil)
}

myStruct 有以下字段:

type MyStruct struct {
elliptic.Curve // I use elliptic.P224() as my curve
X, Y, Z *big.Int
}

对于同一个输入值SInput多次运行myHash函数的输出如下:

[38 39 88 96 46 192 74 20 93 238 4 18 134 253 238 154 210 89 64 204 13 27 60 78 228 33 57 20 173 80 67 196]

[38 39 88 96 46 192 74 20 93 238 4 18 134 253 238 154 210 89 64 204 13 27 60 78 228 33 57 20 173 80 67 196]

[38 39 88 96 46 192 74 20 93 238 4 18 134 253 238 154 210 89 64 204 13 27 60 78 228 33 57 20 173 80 67 196]

[172 219 215 153 250 30 31 136 175 47 25 178 231 84 90 173 31 130 136 131 169 23 98 198 198 109 255 76 228 134 100 191]

[31 114 57 247 85 214 151 174 124 255 5 200 17 200 198 107 105 56 53 126 233 242 228 74 17 87 238 7 136 100 80 160]

[38 39 88 96 46 192 74 20 93 238 4 18 134 253 238 154 210 89 64 204 13 27 60 78 228 33 57 20 173 80 67 196]

[38 39 88 96 46 192 74 20 93 238 4 18 134 253 238 154 210 89 64 204 13 27 60 78 228 33 57 20 173 80 67 196]

[38 39 88 96 46 192 74 20 93 238 4 18 134 253 238 154 210 89 64 204 13 27 60 78 228 33 57 20 173 80 67 196]

[38 39 88 96 46 192 74 20 93 238 4 18 134 253 238 154 210 89 64 204 13 27 60 78 228 33 57 20 173 80 67 196]

[172 219 215 153 250 30 31 136 175 47 25 178 231 84 90 173 31 130 136 131 169 23 98 198 198 109 255 76 228 134 100 191]

[172 219 215 153 250 30 31 136 175 47 25 178 231 84 90 173 31 130 136 131 169 23 98 198 198 109 255 76 228 134 100 191]

[38 39 88 96 46 192 74 20 93 238 4 18 134 253 238 154 210 89 64 204 13 27 60 78 228 33 57 20 173 80 67 196]

我做错了什么?

最佳答案

当您调用 fmt.Sprintf("%v") 并传递指针(包括作为指针的结构字段,例如 P224 Curve 包含)时,它会打印地址,而不是值.因为每次运行的地址都会不同,所以每次运行都会得到不同的哈希值。尝试使用一些确定性的东西,它会更适合这个目的——可能是 JSON 或 Gob,或者编写你自己的简单序列化器。

关于戈朗 : sha256 returns two different values for the same input,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48173628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com