Праверка MD5 файла ў VB.NET

Калі карыстальнік націскае на кнопку, яна папросіць яго абраць канкрэтны файл. Ён правярае хэш MD5, каб ведаць, калі гэта правільны файл.

Праблема з кодам з'яўляецца тое, што ён дае мне паведамленне «Няправільны файл», і я цалкам упэўнены, што хэш MD5 для файла «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
0
гм .... чаму, чорт вазьмі, вы змешванне VBS і VB.NET ??? Гэта, натуральна, прывядзе да праблем .... зноў і зноў.
дададзена аўтар specializt, крыніца
Акрамя кода, які мае нагрузку барахла ў ім, не павiнна быць «{0: X2}» ?
дададзена аўтар samjudson, крыніца

3 адказы

Калі ласка, азнаёмцеся з наступнымі артыкуламі MS KB:

HashAlgorithm.ComputeHash Метад (струмень)

Як вылічыць і параўнаць значэння Хэш-функцыі з дапамогай Visual Basic .NET або Visual Basic 2005

У прынцыпе, вы павінны змяніць сваё пакаленне радкі MD5 у тым, што выкладзеныя ў адным з артыкулаў. Каб працытаваць другой:

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

Вы маглі б назваць гэты метад з md5.Hash ў якасці параметру і захаваць вынік у зменнай md5code:

md5Code = ByteArrayToString(md5.Hash)
1
дададзена

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

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

Вы можаце выдаліць гэта ў кодзе:

Dim ObjFSO As Object = CreateObject("Scripting.FileSystemObject")  
Dim objFile = ObjFSO.GetFile(OpenFileDialog1.FileName)
0
дададзена

Уставіць у наступным кодзе для ўстаноўкі:

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, проста выкарыстоўвайце md5 (імя_файла) і замяніць імя_файла са шляху вашага файла.

Напрыклад:

TextBox1.Text = md5("C:\Desktop\foo.txt")
0
дададзена