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,注意惯性思维
-