У меня есть следующая функция в C#, хеширующая функция, которую мне нужно преобразовать в PHP. Я попробовал несколько вещей в PHP, но я не получаю те же результаты (я не совсем хорошо с .NET)Преобразование функции хеширования C# в PHP
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 - теперь установлен верно для добытого в виде двоичных данных
Вы должны принять ответ DampeS8Ns, если он указал вам в правильном направлении. – jgauffin