首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >php hmac_sha256 和go hmac sha256结果不一样

php hmac_sha256 和go hmac sha256结果不一样

作者头像
用户12023652
发布2026-07-29 09:29:44
发布2026-07-29 09:29:44
650
举报

data=“hello, bruce” secret = "abc123"

Php,hmac_sha256的结果是,49c7d9cad6ec999aed5e683ade84a14382e9e2af1fd22a03236c49f4e7e3e483

代码语言:javascript
复制
$msg = "hi bruce";
$secret = "abc123";
echo hash_hmac("sha256", $msg, $secret);

go hmac sha256的结果是, 68692062727563656d2d9fc610337f813a1b85869ec214129940860543ad04308d87357f6c0133f6

代码语言:javascript
复制
  data := []byte("hi bruce")
	key := []byte("abc123")
	m := hmac.New(sha256.New, key)
	result := m.Sum(data)
	fmt.Println(hex.EncodeToString(result))

两个结果不一样,后来调整了一下go的代码, 终于一样了

代码语言:javascript
复制
  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加密结果,

代码语言:javascript
复制
$msg = "hi bruce";
echo hash("sha256", $msg);
// fd0ba5023ae46431c1f621d3fdd58464f27241032bf13b98d6a81773d48d4da1

这个时候,PHP与go生成的是一样的

当我们用sha256加密一个信息时,可以直接在sum中放入数据,也可以在先write数据,sum(nil)结果都是一样

代码语言:javascript
复制
  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,注意惯性思维

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档