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;
}

posted @ 2022-08-08 09:15  晚霞起风了  阅读(1294)  评论(1)    收藏  举报