0

ユーザーがボタンをクリックすると、特定のファイルを選択するように求められます。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
4

3 に答える 3

1

次の MS KB 記事を参照してください。

HashAlgorithm.ComputeHash メソッド (ストリーム)

Visual Basic .NET または Visual Basic 2005 を使用してハッシュ値を計算および比較する方法

基本的に、MD5 文字列の生成を、いずれかの記事で概説されているものに変更する必要があります。2番目を引用するには:

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)
于 2011-10-29T02:34:03.823 に答える
0

これを変える: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)
于 2013-01-02T09:47:12.277 に答える