接入C#接口的时候,使用了 HmacSHA1 + base64 加密,在网上搜索的方法发现PHP和C#有差异,经过仔细研究找到问题,特此记录。
一、PHP 的 HmacSHA1 加密方法:
$hmac = hash_hmac("sha1", $str, $privateKey, true); //获得是二进制 = C# byte[]
二、base64 加密:
注意看 C# 的base64 里面传入的是二进制还是字符串
1、情况1:字符串进行base64加密
//C# 里面传入的是字符串 Convert.ToBase64String(Encoding.UTF8.GetBytes(AStr)); //PHP 获得的 HmacSHA1 必须也是字符串 $hmac = bin2hex($hmac); //二进制转换成字符串 base64_encode($hmac);
2、情况2:二进制 base64 加密
//C# 对 byte[] 进行加密 Convert.ToBase64String(byte[]); //PHP 也需要对二进制进行加密 base64_encode($hmac); //无需经过 bin2hex() 处理