php hmac_sha256 和go hmac sha256結果不一樣

php hmac_sha256 和go hmac sha256結果不一樣
data=“hello, bruce” secret = "abc123"

Php,hmac_sha256的結果是,49c7d9cad6ec999aed5e683ade84a14382e9e2af1fd22a03236c49f4e7e3e483

$msg = "hi bruce";
$secret = "abc123";
echo hash_hmac("sha256", $msg, $secret);
go hmac sha256的結果是, 68692062727563656d2d9fc610337f813a1b85869ec214129940860543ad04308d87357f6c0133f6

  data := []byte("hi bruce")
    key := []byte("abc123")
    m := hmac.New(sha256.New, key)
    result := m.Sum(data)
    fmt.Println(hex.EncodeToString(result))
兩個結果不一樣,後來調整了一下go的代碼, 終於一樣了

  data := []byte("hi bruce")
    key := []byte("abc123")
    m := hmac.New(sha256.New, key)
  _,_ =m.Write(data)
    result := m.Sum(nil)
    fmt.Println(hex.EncodeToString(result))
爲什麼會這樣呢?

php使用sha256加密結果,

$msg = "hi bruce";
echo hash("sha256", $msg);
// fd0ba5023ae46431c1f621d3fdd58464f27241032bf13b98d6a81773d48d4da1
這個時候,PHP與go生成的是一樣的

當我們用sha256加密一個信息時,可以直接在sum中放入數據,也可以在先write數據,sum(nil)結果都是一樣

  data := []byte("hi bruce")
    tmp:= sha256.Sum256(data)
    fmt.Println(hex.EncodeToString(tmp[:]))
    m1 := sha256.New()
    _,_=m1.Write(data)
    fmt.Println(hex.EncodeToString(m1.Sum(nil)))
//運行結果如下
//fd0ba5023ae46431c1f621d3fdd58464f27241032bf13b98d6a81773d48d4da1
//fd0ba5023ae46431c1f621d3fdd58464f27241032bf13b98d6a81773d48d4da1

在hmac,我們習慣思維也會認爲一樣,所以出現驚奇,竟然結果不一樣了

但在go的hmac中不一樣了,因爲hmac是多次調用sha256,注意慣性思維

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章