Отличается результат hmacsha512 c# и php
При создании хеша на c#, отличается от php на сервере. Проблема из-за новой строки, если в файле одна строка, то хеш одинаковый, если несколько строк, то результат разный. Возможно php создает доп. управляющие символы, но как тогда создать одинаковый хеш?
Код на c#:
string key = "CTI.oCT9qT";
string nonce = "fCjVyJJcujaRgsxmlh3WCcaeB5j1Zjb3F23v";
string storeid = "428768449";
string stringToSign = File.ReadAllText("t1.json", encoding);
string message = "POST\n/woc/order\napplication/json;charset=utf-8\n" + storeid + "\n" + nonce + "\n" + stringToSign + "\n";
var keyByte = encoding.GetBytes(key);
using (var hmacsha512 = new HMACSHA512(keyByte))
{
hmacsha512.ComputeHash(encoding.GetBytes(message));
string result = Convert.ToBase64String(hmacsha512.Hash);
Console.WriteLine("Result: {0}", result);
}
Код на php :
$jsonString =
'{"resourceId":428768449,
"resourceOrderNumber":"ORDER-16"}';
$nonce = 'fCjVyJJcujaRgsxmlh3WCcaeB5j1Zjb3F23v';
$storeid = '428768449';
$secret = 'CTI.oCT9qT';
$stringToSign = "POST\n/woc/order\napplication/json;charset=utf-8\n$storeid\n$nonce\n$jsonString\n";
print "$stringToSign\n";
$digest = hash_hmac('sha512', $stringToSign, $secret, false);
print "$digest\n";
$hmacString = 'HmacSHA512 '.$storeid.':'.$nonce.':'.base64_encode($digest);
print "$hmacString\n";
Ответы (1 шт):
Автор решения: Алексей
→ Ссылка
Проблема была в разнице стандартов переноса строк
string stringToSign = File.ReadAllText("t1.txt").Replace("\r\n", "\n");