为了账号安全,请及时绑定邮箱和手机立即绑定

为什么每次重新运行代码,得到的hash值都是一样的?

貌似计算hash的函数没写完整

正在回答

4 回答

//注意int转string不能这样:string(b.Index) + string(b.TimeStamp)
blockData := strconv.Itoa(int(b.Index))+strconv.Itoa(int(b.TimeStamp))+b.PreBlockHash
fmt.Println(blockData)

这是因为老师的int转string语句写错了,

string(b.Index) + string(b.TimeStamp)

上面这条语句每次输出都是同一个乱码符号,因此Index和TimeStamp在计算哈希值的时候根本没有起到作用,而创世区块其他的值都是固定的,所以每次算出来的哈希值都是一样的。

2 回复 有任何疑惑可以回复我~
#1

weixin_慕容7184231

创始区块的时间戳也是会变化的,所以hash值应该也不同吧
2023-07-10 回复 有任何疑惑可以回复我~
func CalculateHash(b Block) string {
   blockData := string(b.Index) + string(b.Timestamp) + b.PreBlockHash + b.Data
   hashInBytes := sha256.Sum256([]byte(blockData))
   return hex.EncodeToString(hashInBytes[:])
}

每次的时间Timestamp都不一样呀,为什么生成的第0个blockhash都一样的~

0 回复 有任何疑惑可以回复我~
#1

慕村1538275

第一次初始化,index为-1的时候是没有timestamp的,导致只有3个参数,index,prehash,data,这三个是固定死的,所以每次第0个都是一样的~
2019-07-25 回复 有任何疑惑可以回复我~
#2

weixin_慕容7184231 回复 慕村1538275

但是index为0的创始区块不是有timestamp的嘛?即time.Now().Unix()
2023-07-10 回复 有任何疑惑可以回复我~

传入的数据是一致的,那么hash出来的结果就不会变。

0 回复 有任何疑惑可以回复我~

这就是hash运算的确定性 看下2-4节就明白了

同一个数据hash后的结果是确定的

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么每次重新运行代码,得到的hash值都是一样的?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信