如何解决PHP 中的 HMAC 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 = 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 上 hash hmac sha256 的输出格式与 c# 不完全相同。以下是 php 哈希 hmac sha256 的示例:https://stackoverflow.com/a/2708000/3706717
string '07a932dd17adc59b49561f33980ec5254688a41f133b8a26e76c611073ade89b' (length=64)
你只需要把它转换成c#的格式
- 每 2 个字符添加一个破折号
- 转换为大写
$string = '07a932dd17adc59b49561f33980ec5254688a41f133b8a26e76c611073ade89b';
$string = strtoupper($string);
$arr = str_split($string,2);
$string = implode("-",$arr);
var_dump($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的输出(由上面的代码转换)应该是相等的字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。