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

来源:4-1 课程总结

星火燎原2015

2019-06-11 21:50

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

写回答 关注

4回答

  • 慕粉1470905606
    2020-03-10 22:36:33
    //注意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在计算哈希值的时候根本没有起到作用,而创世区块其他的值都是固定的,所以每次算出来的哈希值都是一样的。

    weixin...

    创始区块的时间戳也是会变化的,所以hash值应该也不同吧

    2023-07-10 00:44:44

    共 1 条回复 >

  • 慕村1538275
    2019-07-25 23:23:30
    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都一样的~

    weixin... 回复慕村1538...

    但是index为0的创始区块不是有timestamp的嘛?即time.Now().Unix()

    2023-07-10 00:40:52

    共 2 条回复 >

  • AIzhuzhu521
    2019-07-08 19:29:33

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

  • 张小牛
    2019-06-25 19:28:32

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

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

用GO语言构建自己的区块链

区块链自己动手实现一把,啥都明白了!

21954 学习 · 38 问题

查看课程

相似问题