This can be achieved by GetHashCode with overloads, allowing to pass either a filePath, a StreamReader or a Stream:
private static string GetHashCode(string filePath, HashAlgorithm cryptoService = null) => GetHashCode(fStream: new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), cryptoService); private static string GetHashCode(StreamReader fileStreamReader, HashAlgorithm cryptoService = null) => GetHashCode(fileStreamReader.BaseStream, cryptoService); /// <summary> /// Compute hash code for file. /// </summary> /// <param name="fStream"></param> /// <param name="cryptoService">This can be either MD5, SHA1, SHA256, SHA384 or SHA512</param> /// <returns>Hash string</returns> private static string GetHashCode(Stream fStream, HashAlgorithm cryptoService = null) { // create or use the instance of the crypto service provider // this can be either MD5, SHA1, SHA256, SHA384 or SHA512 using (cryptoService ??= System.Security.Cryptography.SHA512.Create()) { using var tmpStream = fStream; var hash = cryptoService.ComputeHash(tmpStream); var hashString = Convert.ToBase64String(hash); return hashString.TrimEnd('='); } } // method
Usage:
WriteLine("Default Sha512 Hash Code : {0}", GetHashCode(FilePath));
Or:
WriteLine("MD5 Hash Code : {0}", GetHashCode(FilePath, new MD5CryptoServiceProvider())); WriteLine("SHA1 Hash Code : {0}", GetHashCode(FilePath, new SHA1CryptoServiceProvider())); WriteLine("SHA256 Hash Code: {0}", GetHashCode(FilePath, new SHA256CryptoServiceProvider())); WriteLine("SHA384 Hash Code: {0}", GetHashCode(FilePath, new SHA384CryptoServiceProvider())); WriteLine("SHA512 Hash Code: {0}", GetHashCode(FilePath, new SHA512CryptoServiceProvider()));