/// <summary>
        /// 计算哈希值
        /// </summary>
        /// <param name="stream">要计算哈希值的 Stream</param>
        /// <param name="algName">算法:sha1,md5</param>
        /// <returns>哈希值字节数组</returns>
        public static byte[] HashData(Stream stream, string algName)
        {
            HashAlgorithm algorithm;

            if (algName == null)
            {
                throw new ArgumentNullException("algName 不能为 null");
            }
            if (string.Compare(algName, "sha256", true) == 0)
            {
                algorithm = SHA256.Create();
            }
            else if (string.Compare(algName, "sm3", true) == 0)
            {
                algorithm = SM3.Create();
            }
            else
            {
                if (string.Compare(algName, "md5", true) != 0)
                {
                    throw new Exception("algName 只能使用 sha256 或 md5");
                }
                algorithm = MD5.Create();
            }
            return(algorithm.ComputeHash(stream));
        }
Exemplo n.º 2
0
        /// <summary>
        /// 拷贝构造函数
        /// </summary>
        /// <param name="Source">要复制的对象实例</param>
        public SM3(SM3 Source)
        {
            BytesCount = Source.BytesCount;

            WOff = Source.WOff;
            if (WOff > 0)
            {
                Array.Copy(Source.W, W, WOff);
            }

            MOff = Source.MOff;
            if (MOff > 0)
            {
                Array.Copy(Source.M, M, MOff);
            }

            // 拷贝状态向量
            Array.Copy(Source.V, V, V.Length);
        }