亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么每次重新運行代碼,得到的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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號