C#:ottieni il checksum di un file utilizzando qualsiasi algoritmo di hashing

 C Programming >> Programmazione C >  >> Tags >> File
C#:ottieni il checksum di un file utilizzando qualsiasi algoritmo di hashing

Questo articolo mostra come ottenere il checksum di un file utilizzando uno di questi algoritmi di hashing:MD5, SHA1, SHA256, SHA384 e SHA512.

Se sei interessato solo a ottenere un tipo specifico di checksum, dai un'occhiata alla prima sezione. Se sei interessato a un metodo di checksum generico che ti consenta di generare il checksum utilizzando uno dei cinque algoritmi di hashing, vai alla sezione inferiore.

Ottieni il checksum MD5 di un file

Diciamo che sei interessato solo a ottenere un tipo specifico di checksum, come MD5. Questa sezione mostra come farlo.

Puoi utilizzare System.Security.Cryptography.MD5 per ottenere il checksum MD5 di un file, in questo modo:

public static string GetMD5Checksum(string filename)
{
	using (var md5 = System.Security.Cryptography.MD5.Create())
	{
		using (var stream = System.IO.File.OpenRead(filename))
		{
			var hash = md5.ComputeHash(stream);
			return BitConverter.ToString(hash).Replace("-", "");
		}
	}
}
Code language: C# (cs)

Questo genera il checksum MD5, lo converte in una stringa esadecimale e rimuove i trattini. Questo è il formato tipico per i checksum MD5.

Usalo su un file come questo:

static void Main(string[] args)
{
	var checksum = GetMD5Checksum(@"C:\NFLTeamStats.json");

	Console.WriteLine(checksum);
}
Code language: C# (cs)

Questo output è il checksum MD5 del file.

AE34D271ACC9C242BC9EED2E0EA72093Code language: plaintext (plaintext)

Ottieni il checksum utilizzando qualsiasi algoritmo di hashing

È possibile utilizzare System.Security.Cryptography.HashAlgorithm.Create() e specificare il metodo di hashing desiderato. Questo è un metodo factory che crea un'istanza di un oggetto algoritmo di hashing. Se specifichi "MD5" viene creato un oggetto System.Security.Cryptography.MD5.

Questo è piuttosto pericoloso, perché puoi passare qualsiasi stringa a HashAlgorithm.Create(). Se quell'algoritmo non esiste, restituirà un oggetto nullo.

È meglio creare un wrapper attorno a questo e creare un enum per specificare il nome dell'algoritmo di hashing. Ciò garantisce che il chiamante trasmetta un algoritmo di hashing legittimo.

Ecco il metodo GetChecksum() generico che accetta un parametro enum HashingAlgoTypes:

public static class ChecksumUtil
{
	public static string GetChecksum(HashingAlgoTypes hashingAlgoType, string filename)
	{
		using (var hasher = System.Security.Cryptography.HashAlgorithm.Create(hashingAlgoType.ToString()))
		{
			using (var stream = System.IO.File.OpenRead(filename))
			{
				var hash = hasher.ComputeHash(stream);
				return BitConverter.ToString(hash).Replace("-", "");
			}
		}
	}

}
public enum HashingAlgoTypes
{
	MD5,
	SHA1,
	SHA256,
	SHA384,
	SHA512
}
Code language: C# (cs)

Questo genera un checksum utilizzando l'algoritmo di hash specificato, converte in una stringa esadecimale e rimuove i trattini.

Chiamalo così:

static void Main(string[] args)
{
	var checksum = ChecksumUtil.GetChecksum(HashingAlgoTypes.SHA512, @"C:\NFLTeamStats.json");

	Console.WriteLine(checksum);
}
Code language: C# (cs)

Questo output è il checksum SHA512 del file:

126C63E7A1C220C8C34D852E861F7A5CADD49B4D98F15C52095F9E5754F2F45BBE363432FDAE2D94EE8CBE7069A90703785C7ECB439534468780A6BBDE6CB06ACode language: plaintext (plaintext)