public Hash(HashFlag flag, Encoding encoding) { Encoding = encoding; switch (flag) { case HashFlag.MD5: AlgorithmName = "MD5"; break; case HashFlag.SHA1: AlgorithmName = "SHA1"; break; case HashFlag.SHA256: AlgorithmName = "SHA256"; break; case HashFlag.SHA384: AlgorithmName = "SHA384"; break; case HashFlag.SHA512: AlgorithmName = "SHA512"; break; case HashFlag.RIPEMD160: AlgorithmName = "RIPEMD160"; break; } }
private void HashTest_3(string key, HashFlag flag) { var result1 = Crypto.Hash(key, flag).SignData("signdata"); Assert.IsNotNull(result1); var result2 = Crypto.Hash(key, flag).SignData(Encoding.UTF8.GetBytes("signdata")); Assert.AreEqual(result1, result2); using (var ms = new System.IO.MemoryStream(Encoding.UTF8.GetBytes("signdata"))) { var result3 = Crypto.Hash(key, flag).SignData(ms); Assert.AreEqual(result1, result3); } }
private static Stream DecodeStream(object input, HashFlag flag) { switch (input) { case string ip2: if (flag == HashFlag.HashFile) { if (File.Exists(ip2)) { return(File.Open(ip2, FileMode.Open, FileAccess.Read, FileShare.Read)); } else { throw new Exception("File does not exist"); } } else { return(new MemoryStream(Settings.DefaultEncoding.GetBytes(ip2))); } case byte[] ip3: return(new MemoryStream(ip3)); case IEnumerable <byte> ip4: return(new MemoryStream(ip4.ToArray())); case FileInfo ip5 when Exists(ip5): return(ip5.Open(FileMode.Open, FileAccess.Read, FileShare.Read)); case Stream str: return(str); } throw new Exception("Can't decode object"); }
private static string HMACName(HashFlag flag) { switch (flag) { case HashFlag.MD5: return("HMACMD5"); case HashFlag.RIPEMD160: return("HMACRIPEMD160"); case HashFlag.SHA1: return("HMACSHA1"); case HashFlag.SHA256: return("HMACSHA256"); case HashFlag.SHA384: return("HMACSHA384"); case HashFlag.SHA512: return("HMACSHA512"); } throw new NotSupportedException(string.Format("不支持的签名算法{0}", flag)); }
public static byte[] Calculate <T>(object input, HashFlag flag = 0) where T : HashAlgorithm { using (var fs = DecodeStream(input, flag)) return(GetHashAlgo <T>()?.ComputeHash(fs)); }
public HashMAC(string key, HashFlag flag) : this(key, HMACName(flag)) { }
/// <summary> /// 基于Key的Hash签名 /// </summary> /// <param name="key"></param> /// <param name="flag"> </param> /// <returns></returns> /// <remarks></remarks> public static IHash Hash(string key, HashFlag flag) { return(new HashMAC(key, flag)); }
/// <summary> /// Hash签名 /// </summary> /// <param name="flag"> </param> /// <returns></returns> public static IHash Hash(HashFlag flag) { return(new Hash(flag)); }
public Hash(HashFlag flag) : this(flag, CryptographySettings.Encoding) { }