zoukankan      html  css  js  c++  java
  • php hmac_sha256 和go hmac sha256结果不一样

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

    2. Php,hmac_sha256的结果是,49c7d9cad6ec999aed5e683ade84a14382e9e2af1fd22a03236c49f4e7e3e483

      • $msg = "hi bruce";
        $secret = "abc123";
        echo hash_hmac("sha256", $msg, $secret);
        
    3. 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))
        
    4. 两个结果不一样,后来调整了一下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))
        
    5. 为什么会这样呢?

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

  • 相关阅读:
    递增一个指针
    ubuntu 系统 sudo apt-get update遇到问题sub-process returned an error code
    熟悉HDFS过程中遇到的问题
    大二暑假第八周进度报告
    大二暑假第七周进度报告
    oracle“ORA-00904”错误:标识符无效
    大学暑假第六周进度报告
    大二暑假第五周进度报告
    使用Navicat for Oracle新建表空间、用户及权限赋予
    大学暑假第四周进度报告
  • 原文地址:https://www.cnblogs.com/qumogu/p/15544743.html
Copyright © 2011-2022 走看看