Пример #1
0
        /// <summary>
        /// 计算哈希值(默认SHA1)
        /// </summary>
        /// <param name="stream">要计算哈希值的 Stream</param>
        /// <param name="algName">算法:sha1,md5</param>
        /// <returns>哈希值字节数组</returns>
        private byte[] HashData(System.IO.Stream stream, AlgNameEnum algNameEnum)
        {
            System.Security.Cryptography.HashAlgorithm algorithm;
            switch (algNameEnum)
            {
            case AlgNameEnum.MD5:
                algorithm = System.Security.Cryptography.MD5.Create();
                break;

            case AlgNameEnum.SHA1:
                algorithm = System.Security.Cryptography.SHA1.Create();
                break;

            case AlgNameEnum.SHA256:
                algorithm = System.Security.Cryptography.SHA256.Create();
                break;

            case AlgNameEnum.SHA384:
                algorithm = System.Security.Cryptography.SHA384.Create();
                break;

            case AlgNameEnum.SHA512:
                algorithm = System.Security.Cryptography.SHA512.Create();
                break;

            default:
                algorithm = System.Security.Cryptography.SHA1.Create();
                break;
            }
            return(algorithm.ComputeHash(stream));
        }
Пример #2
0
        /// <summary>
        /// 计算文件的哈希值
        /// </summary>
        /// <param name="fileName">要计算哈希值的文件名和路径</param>
        /// <param name="algName">算法:sha1,md5</param>
        /// <returns>哈希值16进制字符串</returns>
        private string HashFile(string fileName, AlgNameEnum algNameEnum)
        {
            if (!System.IO.File.Exists(fileName))
            {
                return(string.Empty);
            }

            System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
            byte[] hashBytes        = HashData(fs, algNameEnum);
            fs.Close();
            return(ByteArrayToHexString(hashBytes));
        }