VB.NET'te dosyanın MD5'inin kontrol edilmesi

Bir kullanıcı düğmeyi tıkladığında, belirli bir dosya seçmesini ister. Bu doğru dosya olup olmadığını MD5 hash kontrol eder.

Kodla ilgili sorun bana "Yanlış Dosya" iletisini vermesidir ve dosya için MD5 karma dosyasının "3982908442F37245B305EDCF4D834494" olduğundan eminim

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
0
um .... neden VBS ve VB.NET'i karıştırıyorsunuz ??? Bu doğal olarak sorunlara yol açacaktır .... tekrar tekrar.
katma yazar specializt, kaynak
Kodunuzda önemsiz bir yük olması dışında, "{0: X2}" olması gerekmez mi?
katma yazar samjudson, kaynak

3 cevap

Lütfen aşağıdaki MS KB makalelerine bakın:

HashAlgorithm.ComputeHash Yöntemi (Akış)

Visual Basic .NET veya Visual Basic 2005 kullanarak karma değerler nasıl hesaplanır ve karşılaştırılır?

Temel olarak, MD5 dizginizin nesnelerini makalelerin herhangi birinde belirtilen şekilde değiştirmeniz gerekir. İkincisini alıntılamak için:

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

Bu yöntemi md5.Hash ile parametre olarak çağırır ve sonucu md5code değişkeninizde saklarsınız:

md5Code = ByteArrayToString(md5.Hash)
1
katma

Change this: buff.Append(String.Format("{0:X1}", hashByte))

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

Bunu kodda kaldırabilirsiniz:

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

Kurulum için aşağıdaki kodu yapıştırın:

Imports System.IO
Imports System.Security.Cryptography

'Start Hash Generator
Function makemd5(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

MD5 karma değerini almak istediğinizde, sadece md5 (dosya_adı) komutunu kullanın ve dosyanızın yolu ile dosya_adı 'nı değiştirin.

Örneğin:

TextBox1.Text = md5("C:\Desktop\foo.txt")
0
katma