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)