问答详情
源自:4-1 课程总结

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

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

提问者:星火燎原2015 2019-06-11 21:50

个回答

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

  • 慕村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都一样的~

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

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

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

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

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