1、使用sha256计算文件hash
using System;
using System.IO;
using System.Security.Cryptography;
public class HashDirectory
{
public static void Main(String[] args)
{
if (args.Length < 1)
{
Console.WriteLine("No directory selected.");
return;
}
string directory = args[0];
if (Directory.Exists(directory))
{
// 创建一个表示指定目录的DirectoryInfo对象。
var dir = new DirectoryInfo(directory);
// 获取目录中每个文件的FileInfo对象。
FileInfo[] files = dir.GetFiles();
// 初始化一个SHA256哈希对象。
using (SHA256 mySHA256 = SHA256.Create())
{
// 计算并打印目录中每个文件的哈希值。
foreach (FileInfo fInfo in files)
{
try {
// 为文件创建一个fileStream。
FileStream fileStream = fInfo.Open(FileMode.Open);
// 确保它位于流的开头。
fileStream.Position = 0;
//计算fileStream的hash。
byte[] hashValue = mySHA256.ComputeHash(fileStream);
// 将文件的名称和散列值写入控制台。
Console.Write($"{fInfo.Name}: ");
PrintByteArray(hashValue);
// 关闭该文件。
fileStream.Close();
}
catch (IOException e) {
Console.WriteLine($"I/O Exception: {e.Message}");
}
catch (UnauthorizedAccessException e) {
Console.WriteLine($"Access Exception: {e.Message}");
}
}
}
}
else
{
Console.WriteLine("The directory specified could not be found.");
}
}
// 以可读格式显示字节数组。
public static void PrintByteArray(byte[] array)
{
for (int i = 0; i < array.Length; i++)
{
Console.Write($"{array[i]:X2}");
if ((i % 4) == 3) Console.Write(" ");
}
Console.WriteLine();
}
}
2、使用sha512计算文件hash
using System;
using System.IO;
using System.Security.Cryptography;
public class HashDirectory
{
public static void Main(String[] args)
{
if (args.Length < 1)
{
Console.WriteLine("No directory selected.");
return;
}
string directory = args[0];
if (Directory.Exists(directory))
{
// 创建一个表示指定目录的DirectoryInfo对象。
var dir = new DirectoryInfo(directory);
// 获取目录中每个文件的FileInfo对象。
FileInfo[] files = dir.GetFiles();
// 初始化一个SHA512哈希对象。
using (SHA512 mySHA512 = SHA512Managed())
{
// 计算并打印目录中每个文件的哈希值。
foreach (FileInfo fInfo in files)
{
try {
// 为文件创建一个fileStream。
FileStream fileStream = fInfo.Open(FileMode.Open);
// 确保它位于流的开头。
fileStream.Position = 0;
//计算fileStream的hash。
byte[] hashValue = mySHA512.ComputeHash(fileStream);
// 将文件的名称和散列值写入控制台。
Console.Write($"{fInfo.Name}: ");
PrintByteArray(hashValue);
// 关闭该文件。
fileStream.Close();
}
catch (IOException e) {
Console.WriteLine($"I/O Exception: {e.Message}");
}
catch (UnauthorizedAccessException e) {
Console.WriteLine($"Access Exception: {e.Message}");
}
}
}
}
else
{
Console.WriteLine("The directory specified could not be found.");
}
}
// 以可读格式显示字节数组。
public static void PrintByteArray(byte[] array)
{
for (int i = 0; i < array.Length; i++)
{
Console.Write($"{array[i]:X2}");
if ((i % 4) == 3) Console.Write(" ");
}
Console.WriteLine();
}
}
相关文档:
.NET Core 通过扩展方法实现密码字符串加密(sha256和Sha512)