-1

最後の問題を最終的に修正した後、最終的なコードは

Function MD5(ByVal strToHash As String) As String
    Dim md5Obj As New Security.Cryptography.MD5CryptoServiceProvider
    Dim bytesToHash() As Byte = System.Text.Encoding.ASCII.GetBytes(strToHash)

    bytesToHash = md5Obj.ComputeHash(bytesToHash)

    Dim strResult As String = ""

    For Each b As Byte In bytesToHash
        strResult += b.ToString("x2")
    Next

    Return strResult
End Function



Dim words As IEnumerable(Of String) = File.ReadLines(OpenFileDialog1.FileName)
    For Each word As String In words
        If String.Equals(MD5(word), hash.Text) Then
            Label2.Text = word
        Else : Label2.Text = "Hash Could Not Be Cracked"
        End If
    Next

ハッシュされた単語が入力したハッシュと一致したら、停止する必要があります。

4

2 に答える 2

0

ループを停止するには、次を使用しますExit For

Dim words As IEnumerable(Of String) = File.ReadLines(OpenFileDialog1.FileName)

For Each word As String In words
    If MD5(word) = hash.Text Then
        Label2.Text = word
        Exit For
    Else : Label2.Text = "Hash Could Not Be Cracked"
    End If
Next

ただし、Elseここでは意味がなく (メソッドが終了するまでフォームは更新されません)、String.Equalsここで置き換えることができることに注意してください=(既に行っています)。

于 2012-04-26T18:55:08.207 に答える
0

とにかく代わりにFirstOrDefault使用しているので、LINQ の を使用できます。ReadLinesReadAllLines

Dim firstWord = (From line In IO.File.ReadLines(OpenFileDialog1.FileName)
    Where String.Equals(MD5(line), hash.Text)).FirstOrDefault()
If firstWord IsNot Nothing Then
    Label2.Text = firstWord 
Else
    Label2.Text = "Hash Could Not Be Cracked"
End If

もう 1 つの方法は単純なループです。

Dim lines = IO.File.ReadAllLines(OpenFileDialog1.FileName)
Dim matchingLine As String = Nothing
For i = 0 To lines.Length -1
    Dim line = lines(i)
    If String.Equals(MD5(line), hash.Text)) Then 
        matchingLine = line
        Exit For
    End If
Next
If matchingLine IsNot Nothing Then
    Label2.Text = matchingLine 
Else
    Label2.Text = "Hash Could Not Be Cracked"
End If
于 2012-04-26T18:47:03.740 に答える