public ref class SHA256 abstract : System::Security::Cryptography::HashAlgorithm
public abstract class SHA256 : System.Security.Cryptography.HashAlgorithm
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class SHA256 : System.Security.Cryptography.HashAlgorithm
type SHA256 = class
inherit HashAlgorithm
[<System.Runtime.InteropServices.ComVisible(true)>]
type SHA256 = class
inherit HashAlgorithm
Public MustInherit Class SHA256
Inherits HashAlgorithm
SHA256
using namespace System;
using namespace System::IO;
using namespace System::Security::Cryptography;
// Print the byte array in a readable format.
void PrintByteArray( array<Byte>^array )
int i;
for ( i = 0; i < array->Length; i++ )
Console::Write( String::Format( "{0:X2}", array[ i ] ) );
if ( (i % 4) == 3 )
Console::Write( " " );
Console::WriteLine();
int main()
array<String^>^args = Environment::GetCommandLineArgs();
if ( args->Length < 2 )
Console::WriteLine( "Usage: hashdir <directory>" );
return 0;
// Create a DirectoryInfo object representing the specified directory.
DirectoryInfo^ dir = gcnew DirectoryInfo( args[ 1 ] );
// Get the FileInfo objects for every file in the directory.
array<FileInfo^>^files = dir->GetFiles();
// Initialize a SHA256 hash object.
SHA256 ^ mySHA256 = SHA256Managed::Create();
array<Byte>^hashValue;
// Compute and print the hash values for each file in directory.
System::Collections::IEnumerator^ myEnum = files->GetEnumerator();
while ( myEnum->MoveNext() )
FileInfo^ fInfo = safe_cast<FileInfo^>(myEnum->Current);
// Create a fileStream for the file.
FileStream^ fileStream = fInfo->Open( FileMode::Open );
// Compute the hash of the fileStream.
hashValue = mySHA256->ComputeHash( fileStream );
// Write the name of the file to the Console.
Console::Write( "{0}: ", fInfo->Name );
// Write the hash value to the Console.
PrintByteArray( hashValue );
// Close the file.
fileStream->Close();
return 0;
catch ( DirectoryNotFoundException^ )
Console::WriteLine( "Error: The directory specified could not be found." );
catch ( IOException^ )
Console::WriteLine( "Error: A file in the directory could not be accessed." );
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))
// Create a DirectoryInfo object representing the specified directory.
var dir = new DirectoryInfo(directory);
// Get the FileInfo objects for every file in the directory.
FileInfo[] files = dir.GetFiles();
// Initialize a SHA256 hash object.
using (SHA256 mySHA256 = SHA256.Create())
// Compute and print the hash values for each file in directory.
foreach (FileInfo fInfo in files)
using (FileStream fileStream = fInfo.Open(FileMode.Open))
// Create a fileStream for the file.
// Be sure it's positioned to the beginning of the stream.
fileStream.Position = 0;
// Compute the hash of the fileStream.
byte[] hashValue = mySHA256.ComputeHash(fileStream);
// Write the name and hash value of the file to the console.
Console.Write($"{fInfo.Name}: ");
PrintByteArray(hashValue);
catch (IOException e)
Console.WriteLine($"I/O Exception: {e.Message}");
catch (UnauthorizedAccessException e)
Console.WriteLine($"Access Exception: {e.Message}");
Console.WriteLine("The directory specified could not be found.");
// Display the byte array in a readable format.
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();
Imports System.IO
Imports System.Security.Cryptography
Public Module HashDirectory
Public Sub Main(ByVal args() As String)
If args.Length < 1 Then
Console.WriteLine("No directory selected")
Return
End If
Dim targetDirectory As String = args(0)
If Directory.Exists(targetDirectory) Then
' Create a DirectoryInfo object representing the specified directory.
Dim dir As New DirectoryInfo(targetDirectory)
' Get the FileInfo objects for every file in the directory.
Dim files As FileInfo() = dir.GetFiles()
' Initialize a SHA256 hash object.
Using mySHA256 As SHA256 = SHA256.Create()
' Compute and print the hash values for each file in directory.
For Each fInfo As FileInfo In files
' Create a fileStream for the file.
Dim fileStream = fInfo.Open(FileMode.Open)
' Be sure it's positioned to the beginning of the stream.
fileStream.Position = 0
' Compute the hash of the fileStream.
Dim hashValue() As Byte = mySHA256.ComputeHash(fileStream)
' Write the name of the file to the Console.
Console.Write(fInfo.Name + ": ")
' Write the hash value to the Console.
PrintByteArray(hashValue)
' Close the file.
fileStream.Close()
Catch e As IOException
Console.WriteLine($"I/O Exception: {e.Message}")
Catch e As UnauthorizedAccessException
Console.WriteLine($"Access Exception: {e.Message}")
End Try
End Using
Console.WriteLine("The directory specified could not be found.")
End If
End Sub
' Print the byte array in a readable format.
Public Sub PrintByteArray(array() As Byte)
For i As Integer = 0 To array.Length - 1
Console.Write($"{array(i):X2}")
If i Mod 4 = 3 Then
Console.Write(" ")
End If
Console.WriteLine()
End Sub
End Module
哈希用作表示大量数据的固定大小的唯一值。 当并且仅当相应数据也匹配时,两组数据的哈希应匹配。 对数据的小更改会导致哈希中出现大量不可预知的更改。
算法的
SHA256
哈希大小为 256 位。
这是一个抽象类。