PHP中的HMAC sha256不返回十六进制和带破折号(-)的输出
我想使用hmac sha256算法生成一个用PHP计算的签名。输出应与c#相同,如下所示: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
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!我从未有过这样的想法。兄弟,你救了我一命,谢谢你。