У меня есть следующая функция на 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', $data, $key, true ) );
}
Пожалуйста, также не четвертый параметр hash_hmac - теперь установлено значение true для необработанного вывода в виде двоичных данных