/// <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)); }
/// <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); }