Проверка MD5 файла в VB.NET - PullRequest
       38

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

0 голосов
/ 28 октября 2011

Когда пользователь нажимает на кнопку, он попросит его выбрать конкретный файл.Он проверяет хеш MD5, чтобы узнать, является ли этот файл правильным.

Проблема с кодом заключается в том, что он выдает мне сообщение «Wrong File», и я полностью уверен, что хеш 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

Ответы [ 3 ]

1 голос
/ 29 октября 2011

Пожалуйста, ознакомьтесь со следующими статьями 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)
0 голосов
/ 28 октября 2017

Вставьте следующий код для установки:

Imports System.IO
Imports System.Security.Cryptography

Function md5(ByVal file_name As String)
    Dim hash = MD5.Create()
    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
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

Если вы хотите получить хеш MD5, просто используйте md5(file_name) и замените file_name на путь вашего файла.

Например:

TextBox1.Text = md5("C:\Desktop\foo.txt")
0 голосов
/ 02 января 2013

Измените это: buff.Append(String.Format("{0:X1}", hashByte))

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

Вы можете удалить это в коде:

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