2011-10-28 5 views
0

Lorsqu'un utilisateur clique sur le bouton, il lui demande de choisir un fichier spécifique. Il vérifie le hachage MD5 pour savoir si c'est le bon fichier.Vérification du MD5 du fichier dans VB.NET

Le problème avec le code est qu'il me donne un message « Fichier incorrect », et je suis tout à fait sûr que le hachage MD5 du fichier est « 3982908442F37245B305EDCF4D834494 »

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click 

     dim md5code as string 

     OpenFileDialog1.ShowDialog() 

     Dim md5 As MD5CryptoServiceProvider = New MD5CryptoServiceProvider 
     Dim f As FileStream = New FileStream(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read, FileShare.Read, 8192) 
     f = New FileStream(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read, FileShare.Read, 8192) 
     md5.ComputeHash(f) 
     Dim ObjFSO As Object = CreateObject("Scripting.FileSystemObject") 
     Dim objFile = ObjFSO.GetFile(OpenFileDialog1.FileName) 

     Dim hash As Byte() = md5.Hash 
     Dim buff As StringBuilder = New StringBuilder 
     Dim hashByte As Byte 
     For Each hashByte In hash 
      buff.Append(String.Format("{0:X1}", hashByte)) 
     Next 

     md5code = buff.ToString() 

     If md5code = "3982908442F37245B305EDCF4D834494" Then 
      TextBox2.Text = OpenFileDialog1.FileName 
     Else 
      MessageBox.Show("Wrong File") 
     End If 
    End Sub 
+2

En dehors de votre code ayant une charge de ferraille en elle, devrait-il pas ' "{0: X2}"'? – samjudson

+0

um .... pourquoi diable mélangez-vous VBS et VB.NET ??? Cela conduira naturellement à des problèmes ... encore et encore. – specializt

Répondre

1

S'il vous plaît voir le MS KB suivant articles:

HashAlgorithm.ComputeHash Method (Stream)

How to compute and compare hash values by using Visual Basic .NET or Visual Basic 2005

Fondamentalement, vous devez changer vos generati de la chaîne MD5 à celle décrite dans l'un des articles. Pour citer le deuxième:

Private Function ByteArrayToString(ByVal arrInput() As Byte) As String 
    Dim i As Integer 
    Dim sOutput As New StringBuilder(arrInput.Length) 
    For i = 0 To arrInput.Length - 1 
     sOutput.Append(arrInput(i).ToString("X2")) 
    Next 
    Return sOutput.ToString() 
End Function 

que vous appelez cette méthode avec md5.Hash comme paramètre et stocker le résultat dans la variable md5code:

md5Code = ByteArrayToString(md5.Hash) 
0

Modifier ceci: buff.Append(String.Format("{0:X1}", hashByte))

à: buff.Append(String.Format("{0:X2}", hashByte))

Vous pouvez supprimer ce dans le code:

Dim ObjFSO As Object = CreateObject("Scripting.FileSystemObject") 
Dim objFile = ObjFSO.GetFile(OpenFileDialog1.FileName) 
0

Pour obtenir le MD5 du fichier, il suffit de coller dans le code suivant:

'Start Hash Generator 
Function md5(ByVal file_name As String) 
    Return hash_generator("md5", file_name) 
End Function 
Function hash_generator(ByVal hash_type As String, ByVal file_name As String) 
    Try 
     Dim hash 
     If hash_type.ToLower = "md5" Then 
      hash = MD5.Create 
     ElseIf hash_type.ToLower = "sha1" Then 
      hash = SHA1.Create() 
     ElseIf hash_type.ToLower = "sha256" Then 
      hash = SHA256.Create() 
     Else 
      MsgBox("Backend Error: Unknown Hash Type - " & hash_type, MsgBoxStyle.Critical) 
      Return "Error" 
     End If 
     Dim hashValue() As Byte 
     Dim fileStream As FileStream = File.OpenRead(file_name) 
     fileStream.Position = 0 
     hashValue = hash.ComputeHash(fileStream) 
     Dim hash_hex = PrintByteArray(hashValue) 
     fileStream.Close() 
     Return hash_hex 
    Catch ex As Exception 
     Return "Error" 
    End Try 
End Function 
Public Function PrintByteArray(ByVal array() As Byte) 
    Dim hex_value As String = "" 
    Dim i As Integer 
    For i = 0 To array.Length - 1 
     hex_value += array(i).ToString("X2") 
    Next i 
    Return hex_value.ToLower 
End Function 
'End Hash Generator 

Alors lorsque vous voulez obtenir le MD5, il suffit d'utiliser md5 (nom_fichier) et remplacer nom_fichier avec le chemin votre fichier.

Par exemple:

TextBox1.Text = md5("C:\Desktop\foo.txt") 
Questions connexes