Générer les hashs MD5, SHA-1 et SHA-256 d'un fichier

Page 1 / 1

Le seul moyen rapide pour savoir si un fichier est corrompu ou non, c'est d'utiliser les fonctions de hachages "MD5", "SHA-1", "SHA-256", ... Ces fonctions permettent aussi de comparer des fichiers, ce qui vous permet de détecter les éventuels doublons.

Pour calculer ces hashs en .Net, rien de plus simple. Il suffit d'utiliser la fonction "ComputeHash" de la classe du hachage souhaité qui se trouve dans l'espace de nom "System.Security.Cryptography".

Etant donné que la procédure est identique, à une ligne près, pour tous les types de hachages existants. Nous avons regroupé les 3 hachages les plus utilisés, dans ce tutoriel.

Important : Le hash recommandé est le SHA-256.
Car, comme indiqué sur "Wikipedia" : "En 2004, une équipe chinoise découvre des collisions complètes. MD5 n'est donc plus considéré comme sûr au sens cryptographique. On suggère maintenant d'utiliser plutôt des algorithmes tels que SHA-256, RIPEMD-160 ou Whirlpool.".

  1. Calculer les hashs : MD5, SHA-1 et SHA-256
  2. Source du programme complet

1. Calculer les hashs : MD5, SHA-1 et SHA-256

Avant de commencer, nous allons importer les espaces de noms suivants :
- System.IO
- System.Security
- System.Security.Cryptography

Note : Les Imports doivent être mis en haut du fichier avant la ligne "Public Class xxx".

VB.NET

' On importe System.IO pour les fichiers
Imports System.IO
' Et System.Security.Cryptography pour les Hashs : MD5, SHA1, SHA256, ...
Imports System.Security
Imports System.Security.Cryptography

Ensuite, nous allons créer la fonction principale que nous nommeront "hash_generator" et qui prendra en paramètres : le type de hash souhaité et le chemin du fichier pour lequel nous souhaité calculer ce hash.

VB.NET

' Fonction qui permet d'obtenir le hash souhaité d'un fichier
Function hash_generator(ByVal hash_type As String, ByVal file_name As String)

  ' On déclare la variable : hash
  Dim hash
  If hash_type.ToLower = "md5" Then
    ' Initialise un objet de hash : md5
    hash = MD5.Create
  ElseIf hash_type.ToLower = "sha1" Then
    ' Initialise un objet de hash : SHA-1
    hash = SHA1.Create()
  ElseIf hash_type.ToLower = "sha256" Then
    ' Initialise un objet de hash : SHA-256
    hash = SHA256.Create()
  Else
    MsgBox("Type de hash inconnu : " & hash_type, MsgBoxStyle.Critical)
    Return False
  End If
  
  ' On déclare une variable qui sera un tableau de bytes (octets)
  Dim hashValue() As Byte
  
  ' On crée un FileStream pour le fichier passé en paramètre
  Dim fileStream As FileStream = File.OpenRead(file_name)
  ' On positionne le curseur au début du stream
  fileStream.Position = 0
  ' On calcule le hash du fichier
  hashValue = hash.ComputeHash(fileStream)
  ' On convertit le tableau d'octets (bytes) en hexadécimal pour qu'on puisse le lire facilement
  Dim hash_hex = PrintByteArray(hashValue)
  
  ' On ferme le fichier ouvert
  fileStream.Close()
  
  ' On retourne le hash
  Return hash_hex
  
End Function

Maintenant que la fonction principale est créée, vous avez dû vous rendre compte que la fonction "PrintByteArray" n'était pas définie. Ce fonction est basée sur celle de Microsoft et permet de convertir un tableau d'octets (bytes) en hexadécimal.

VB.NET

' On parcoure le tableau de bytes (octets) et on convertit chaque octet (byte) en hexadécimal
Public Function PrintByteArray(ByVal array() As Byte)

  Dim hex_value As String = ""

  ' On parcoure le tableau de bytes (octets)
  Dim i As Integer
  For i = 0 To array.Length - 1
  
    ' on convertit chaque octet (byte) en hexadécimal
    hex_value += array(i).ToString("X2")
  
  Next i
  
  ' On retourne la chaine de caractères en minuscules
  Return hex_value.ToLower

End Function

Pour que le code soit plus clair, et aussi par rapidité, vous pouvez créer les fonctions nommées avec les types de hashs à générer :

VB.NET

' md5 est un nom réservé, nous avons donc nommé la fonction : md5_hash
Function md5_hash(ByVal file_name As String)
  Return hash_generator("md5", file_name)
End Function
 
Function sha_1(ByVal file_name As String)
  Return hash_generator("sha1", file_name)
End Function
 
Function sha_256(ByVal file_name As String)
  Return hash_generator("sha256", file_name)
End Function

Et pour finir, pour utiliser ces fonctions, il suffit de passer le chemin du fichier souhaité en paramètre.

VB.NET

' on indique le chemin du fichier
Dim path As String = "C:\mon_fichier.exe"

' Et on calcule les Hashs : MD5, SHA-1 et SHA-256
Dim hash_md5 = md5_hash(path)
Dim hash_sha_1 = sha_1(path)
Dim hash_sha_256 = sha_256(path)

2. Source du programme complet

Comme vous le confirmera VirusTotal (Onglet : Informations supplémentaires), les hashs obtenus sont corrects.

Télécharger la source