我在C#中有以下函数,一个我需要转换为
PHP的散列函数.我在
PHP中尝试过一些东西,但是我没有得到相同的结果(我对.NET不太满意)
private static string GetSignature(string args,string privatekey)
{
var encoding = new System.Text.ASCIIEncoding();
byte[] key = encoding.GetBytes(privatekey);
var myhmacsha256 = new HMACSHA256(key);
byte[] hashValue = myhmacsha256.ComputeHash(encoding.GetBytes(args));
string hmac64 = Convert.ToBase64String(hashValue);
myhmacsha256.Clear();
return hmac64;
}
PHP中的一次(错误)尝试是这样的:
function encode($data,$key)
{
return base64_encode( hash_hmac('sha256',$data,$key ) );
}
答案
DampeS8N下面建议的略有变化对我有用.
function encode($data,$key)
{
iconv_set_encoding("input_encoding","ASCII");
iconv_set_encoding("internal_encoding","ASCII");
iconv_set_encoding("output_encoding","ASCII");
return base64_encode( hash_hmac('sha256',$key,true ) );
}
请不要使用hash_hmac的第四个参数 – 现在将原始输出设置为true作为二进制数据