C# HmacSHA256加密与java HmacSHA256一致
因为C#的byte是无符号类型,取值范围为0~255,java的byte类型是有符号类型,取值为-128~127,当ComputeHash获取到hash值后,需要判断byte是否小于等于127,如果满足条件则取当前值,否则就使用当前值(byte)减去256
public static string HmacSHA256Encrypt(string secret, string signKey)
{
string signRet = string.Empty;
using (HMACSHA256 mac = new HMACSHA256(Encoding.UTF8.GetBytes(secret)))
{
mac.Initialize();
byte[] hash = mac.ComputeHash(Encoding.UTF8.GetBytes(signKey));
sbyte[] sb = new sbyte[hash.Length];
for (int i = 0; i < hash.Length; i++)
{
sb[i] = hash[i] <= 127 ? (sbyte)hash[i] : (sbyte)(hash[i] - 256);
}
byte[] unsignedByteArray = (byte[])(Array)sb;
signRet = Convert.ToBase64String(unsignedByteArray);
}
return signRet;
}