Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的HMAC sha256不返回十六进制和带破折号(-)的输出_Php_Algorithm_Hex_Signature_Sha256 - Fatal编程技术网

PHP中的HMAC sha256不返回十六进制和带破折号(-)的输出

PHP中的HMAC sha256不返回十六进制和带破折号(-)的输出,php,algorithm,hex,signature,sha256,Php,Algorithm,Hex,Signature,Sha256,我想使用hmac sha256算法生成一个用PHP计算的签名。输出应与c#相同,如下所示: private static string CreateToken(string message, string secret) { var encoding = new System.Text.UTF8Encoding(); byte[] keyByte = encoding.GetBytes(secret); byte[] messageBytes = encod

我想使用hmac sha256算法生成一个用PHP计算的签名。输出应与c#相同,如下所示:

private static string CreateToken(string message, string secret)
{

      var encoding = new System.Text.UTF8Encoding();
      byte[] keyByte = encoding.GetBytes(secret);
      byte[] messageBytes = encoding.GetBytes(message);
      using (var hmacsha256 = new HMACSHA256(keyByte))
      {
        byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
        return BitConverter.ToString(hashmessage);
      }
}
输出:

26-FF-E2-E2-95-13-30-4F-96-D4-44-CB-69-21-06-57-B4-E4-4E-83-7B-7C-8E-89-47-C6-67-B3-44-59-4F-18

php上哈希hmac sha256的输出格式与c#不完全相同。下面是php哈希hmac sha256的示例:

string'07A932DD17ADC59B4956F33980EC5254688A41F133B8A26E76C611073ADE89B'(长度=64)

您只需要将其转换为c的格式

  • 每2个字符添加一个破折号
  • 转换为大写
$string='07A932DD17ADC59B4956F33980EC5254688A41F133B8A26E76C611073ADE89B';
$string=strtoupper($string);
$arr=str_split($string,2);
$string=内爆(“-”,$arr);
变量转储($string);
输出:

string(95)“07-A9-32-DD-17-AD-C5-9B-49-56-1F-33-98-0E-C5-25-46-88-A4-1F-13-3B-8A-26-E7-6C-61-10-73-AD-E8-9B”


假设明文和密码相同,c#和php(通过上面的代码转换)的输出应该是相等的字符串。

Wow!我从未有过这样的想法。兄弟,你救了我一命,谢谢你。