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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

與散列中的 Sum(val) 相比,調用 Write(val) 然后 Sum(nil) 之間的區別?

與散列中的 Sum(val) 相比,調用 Write(val) 然后 Sum(nil) 之間的區別?

Go
慕少森 2021-09-13 14:37:54
我正在考慮使用 Go 的加密包,我有一個簡單的例子,我想弄清楚。我知道我可以使用io.WriteString散列,但我想在將它與另一個庫連接之前直接了解散列對象。package mainimport (    "crypto/md5"    "fmt")func main() {    val := []byte("Hello World")    h := md5.New()    h.Write(val)    fmt.Printf("%x\n", h.Sum(nil))    fmt.Println()    h2 := md5.New()    fmt.Printf("%x\n", h2.Sum(val))}運行它會產生以下輸出:b10a8db164e0754105b7a99be72e3fe548656c6c6f20576f726c64d41d8cd98f00b204e9800998ecf8427e在偽代碼中,我希望:h.Write(part1)h.Write(part2)result := h.Sum(part3)會產生相同的結果result := h.Sum(part1 + part2 + part3)但在我上面的簡單示例中,我什至無法讓單個部件在兩種情況下產生相同的輸出。在 md5 的 GoLang pkg 站點列表中Write神秘失蹤,這讓我相信我可能使用錯誤。我特別困惑的是,如果我只使用該方法,我會得到比平常更長的哈希值。Sum這里發生了什么?編輯:我決定打印十六進制 forval并注意到它與h2.Sum(val)輸出的開頭完全匹配。比較:val: 48656c6c6f20576f726c64 h2: 48656c6c6f20576f726c64d41d8cd98f00b204e9800998ecf8427e我肯定做錯了什么。我應該Write完全避免使用該功能并堅持使用io嗎?
查看完整描述

1 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

Sum將當前散列附加到參數并返回結果。該參數不會添加到哈希中。

提供該參數是為了使應用程序可以在獲取哈希時避免分配。許多應用程序不需要這種優化,只需調用h.Sum(nil).


查看完整回答
反對 回復 2021-09-13
  • 1 回答
  • 0 關注
  • 352 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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