可以通过 GetHashCode
的重载实现,允许传递 filePath、StreamReader 或 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);
private static string GetHashCode(Stream fStream, HashAlgorithm cryptoService = null)
{
using (cryptoService ??= System.Security.Cryptography.SHA512.Create())
{
using var tmpStream = fStream;
var hash = cryptoService.ComputeHash(tmpStream);
var hashString = Convert.ToBase64String(hash);
return hashString.TrimEnd('=');
}
}
使用方法:
WriteLine("Default Sha512 Hash Code : {0}", GetHashCode(FilePath));
或:
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()));