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;
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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));
        }
Beispiel #5
0
 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)
 {
 }