我在PHP中有一个字符串,它被转换为字节数组并进行哈希处理.
转换为字节数组的字符串如下所示:
"G".chr(0)."便便";
我需要在C#中等效字节数组,所以我可以得到相同的哈希..
编辑:这是完全问题,导致哈希不一样.
PHP
$api_secret = '5432919427bd18884fc2a6e48b65dfba48fd9a1a46e3468b52fadbc6d6b463425'; $data = 'payment_currency=USD&group_orders=0&count=100&nonce=1385689989977529'; $endpoint = '/info/orderbook'; $signature = hash_hmac('sha512', $endpoint . chr(0) . $data, $api_secret); $result = base64_encode($signature);
C#
var apiSecret = "5432919427bd18884fc2a6e48b65dfba48fd9a1a46e3468b52fadbc6d6b463425"; var data = "payment_currency=USD&group_orders=0&count=100&nonce=1385689989977529"; var endPoint = "/info/orderbook"; System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); String message = endpPoint + Convert.ToChar(0) + data; var hmacsha512 = new HMACSHA512(encoding.GetBytes(message)); var result = Convert.ToBase64String(hmacsha512.Hash);
我尝试过不同的base64编码,如:
public static string ByteToString(byte[] buff) { string sbinary = ""; for (int i = 0; i < buff.Length; i++) sbinary += buff[i].ToString("X2"); /* hex format */ return sbinary; }
但最终问题似乎是由于chr(0)php使用而被散列的byteArray.