/// <summary> /// 计算文件 Hash 值 /// </summary> /// <param name="path"></param> /// <param name="hashAlgorithm"></param> /// <returns></returns> public static async Task <string> ComputeFileHashAsync(string path, HashAlgorithm hashAlgorithm) { await using var fs = File.OpenRead(path); var retVal = await hashAlgorithm.ComputeHashAsync(fs); return(BitConverter.ToString(retVal).Replace("-", string.Empty)); }
private async Task VerifyComputeHashStreamAsync(Stream input, string output) { byte[] expected = ByteUtils.HexToByteArray(output); byte[] actual; using (HashAlgorithm hash = Create()) { Assert.True(hash.HashSize > 0); actual = await hash.ComputeHashAsync(input); } Assert.Equal(expected, actual); }
private async Task <bool> EnsureExistAndHash(string file, string requiredHash, HashAlgorithm sha) { if (!File.Exists(file)) { return(false); } if (string.IsNullOrEmpty(requiredHash)) { return(true); } await using var stream = File.OpenRead(file); var hash = await sha.ComputeHashAsync(stream); var hashString = BytesToString(hash); return(hashString.Equals(requiredHash, StringComparison.CurrentCultureIgnoreCase)); }