2017-06-02 6 views
-1

テキストファイルから取得した文字列をハッシュする新しいアプリケーションを起動しました。 しかし、私はリストボックスとハッシュを1つずつ設定を保存し、リストボックスをクリアし、自分の設定からすべてのコンテンツをロードするテキストをロードする方法を整理することはできません。 まあ、私はすべてのコードを並べ替えるが、私はリストボックスにロードされたすべての文字列をハッシュする方法を見つけることができません。 この瞬間に、それは非常に簡単ですが、私ドントンそれだけで最後の文字列 をハッシュし、私はこれが私のコード実際にはまあ各文字列をテキストファイルから1つずつハッシュします。

Imports System.IO 
Imports System.Security.Cryptography 
Imports System.Text 

Public Class Form2 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim md5 As MD5 = System.Security.Cryptography.MD5.Create() 
    Dim inputBytes As Byte() = System.Text.Encoding.ASCII.GetBytes(TextBox1.Text) 
    Dim hash As Byte() = md5.ComputeHash(inputBytes) 
    Dim sb As New StringBuilder() 
    For i As Integer = 0 To hash.Length - 1 
     sb.Append(hash(i).ToString("x2")) 
    Next 
    Dim openfile = New OpenFileDialog() 
    openfile.Filter = "Text (*.txt)|*.txt" 
    If (openfile.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then 
     Dim myfile As String = openfile.FileName 
     Dim allLines As String() = File.ReadAllLines(myfile) 
     For Each line As String In allLines 

      ListBox1.Items.Add(line) 

      TextBox2.Text = ListBox1.Items.Add(line) 
      TextBox3.Text = line 
      TextBox2.Text = sb.ToString 
      My.Settings.md5_hashes.Add(TextBox3.Text + "<--->" + TextBox2.Text) 

      My.Settings.Save() 

      ListBox1.Items.Clear() 

     Next 
     For Each item In My.Settings.md5_hashes 
      ListBox1.Items.Add(item) 
     Next 
    End If 

    'TextBox2.Text = sb.ToString 
    'ListBox1.Items.Add(TextBox1.Text + "<--->" + TextBox2.Text) 


End Sub 
End Class 
+0

あなたのコードは実際には意味がありません。あなたの目的がファイルの各行をハッシュするのであれば、ファイル内の各行にアクセスするループの中でハッシュを計算するコードが必要です。そこにハッシュを1つだけ計算すれば、それはファイルを開く前でもあります。実際に実行する必要のあるステップを書き留めてから、そのステップを実装するコードを記述してください。あなたがそうするならば、私はあなたがファイルを開き、ハッシュを計算しないということを非常に疑います。コードを書く前に行うべきことを正確に知っていて、明らかにしてはいけません。 – jmcilhinney

+0

ええ私は、インポートされたファイルから各行をハッシュしたい –

+0

実際にはいはい私はテキストファイルの各行をハッシュし、リストボックスに1つずつ挿入したいが、私は失敗することはないよ –

答えて

0

ある一つ一つをハッシュし、リストボックスに2

を追加する必要がありますjmcilhinneyが紙の上に書いてあることを私にすべて伝える前に参照してください。 それは私の目の前ですソリューション

Imports System.IO 
Imports System.Security.Cryptography 
Imports System.Text 

Public Class Form2 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim openfile = New OpenFileDialog() 
    openfile.Filter = "Text (*.txt)|*.txt" 
    If (openfile.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then 
     Dim myfile As String = openfile.FileName 
     Dim allLines As String() = File.ReadAllLines(myfile) 
     For Each line As String In allLines 

      ListBox1.Items.Add(line) 
      Using hasher As MD5 = MD5.Create() ' create hash object 

       ' Convert to byte array and get hash 
       Dim dbytes As Byte() = 
        hasher.ComputeHash(Encoding.UTF8.GetBytes(line)) 

       ' sb to create string from bytes 
       Dim sBuilder As New StringBuilder() 

       ' convert byte data to hex string 
       For n As Integer = 0 To dbytes.Length - 1 
        sBuilder.Append(dbytes(n).ToString("X2")) 
       Next n 

       ListBox1.Items.Add(sBuilder.ToString) 
      End Using 
     Next 

     For Each item In My.Settings.md5_hashes 
      ListBox1.Items.Add(item) 
     Next 

    End If 

    'TextBox2.Text = sb.ToString 
    'ListBox1.Items.Add(TextBox1.Text + "<--->" + TextBox2.Text) 


End Sub 
Shared Function GetHash(theInput As String) As String 

    Using hasher As MD5 = MD5.Create() ' create hash object 

     ' Convert to byte array and get hash 
     Dim dbytes As Byte() = 
      hasher.ComputeHash(Encoding.UTF8.GetBytes(theInput)) 

     ' sb to create string from bytes 
     Dim sBuilder As New StringBuilder() 

     ' convert byte data to hex string 
     For n As Integer = 0 To dbytes.Length - 1 
      sBuilder.Append(dbytes(n).ToString("X2")) 
     Next n 

     Return sBuilder.ToString() 
    End Using 

End Function 
End Class 
+0

私が言うことの一つは、ファイルの各行に新しいMD5オブジェクトを作成する必要がないということです。作成して再利用することができます。また、 'myHexString = String.Concat(myByteArray.Select(Function(b)b.ToString(" X2 ")))'のように 'Byte'配列からヘックス' String'を作成することもできます。 – jmcilhinney

+0

私はリプレイと助けのためのタンク –

+0

よく事実wen私はデバッグモードでビジュアルベーシックな2012年のアプリケーションを実行するすべてのものは右に行くしかしそれではウェン私はVisual Studioでアプリケーションを開こうとするそれはNulled例外が来るこれは私のエラーです –

関連する問題