public RequestModel(string action, HmacType signatureMethod) { Action = action; SignatureMethod = signatureMethod.ToString(); Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); Nonce = new Random(DateTime.Now.Millisecond).Next(10000, 99999); }
/// <summary> /// HMAC VerityData /// </summary> /// <param name="key"></param> /// <param name="content"></param> /// <param name="hmacType"></param> /// <returns></returns> public static bool VerifyData(string key, string content, HmacType hmacType) { var data = content.Base64ToBytes(); var alg = GetHmac(key, hmacType); return data.Take(alg.HashSize >> 3).SequenceEqual(alg.ComputeHash(data.Skip(alg.HashSize >> 3).ToArray())); }
private static HMAC GetHmac(string key, HmacType hmacType) { var bytes = key.ToDefaultBytes(); switch (hmacType) { case HmacType.Ripemd160: return new HMACRIPEMD160(bytes); case HmacType.Sha1: return new HMACSHA1(bytes); case HmacType.Sha256: return new HMACSHA256(bytes); case HmacType.Sha384: return new HMACSHA384(bytes); case HmacType.Sha512: return new HMACSHA512(bytes); default: return new HMACMD5(bytes); } }
/// <summary> /// HMAC SignData /// </summary> /// <param name="key"></param> /// <param name="content"></param> /// <param name="hmacType"></param> /// <returns></returns> public static string SignData(string key, string content, HmacType hmacType) { var data = content.ToDefaultBytes(); var alg = GetHmac(key, hmacType); return alg.ComputeHash(data).Concat(data).ToArray().Bytes2Base64(); }