Vernam Verschlüsselung speichern

  • VB.NET

Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von AbsolutCF.

    Vernam Verschlüsselung speichern

    Hi liebe VB Freunde,

    ich brauche dringend Hilfe.

    Ich hab ein Programm was sich eine Textdatei einliest ( 9014 Zeilen , jede Zeile beinhaltet um die 20 Werte mit ";" Trennung ) und dann per Vernam Verschlüsselung verschlüsselt.

    Die Datei wir in eine Listbox geladen. Dann wir jede Zeile in eine String gepackt und mit .Split(";") getrennt. Jeder Wert wird verschlüsselt und dann wieder in einen String gepackt der dann in eine andere Listbox mit ";" Trennung geschrieben wird.

    Nun speicher ich die verschlüsselte Lsitbox per Streamwriter als TXT Datei ab. Verschlüsselte TXT Datei hat auch 9014 Zeilen.

    Lade ich nun diese per Vernam verschlüsselte TXT Datei zeilenweise wieder in eine Listbox hat diese auf einmal über 11.000 Zeilen und die Werte sind alle verrutscht.

    Hier der wesentliche Code:

    VB.NET-Quellcode

    1. Dim sPassword As String = "PASS"
    2. Public Function VernamCode(ByVal sOriginal As String, ByVal sPassword As String) As String ' Verschlüsselung
    3. Dim i As Long
    4. Dim aktPos As Long
    5. Dim bakt As Byte
    6. Dim bcode As Byte
    7. VernamCode = ""
    8. aktPos = 1
    9. For i = Len(sPassword) + 1 To Len(sOriginal)
    10. sPassword = sPassword & Mid(sPassword, aktPos, 1)
    11. aktPos = aktPos + 1
    12. If aktPos > Len(sPassword) Then aktPos = 1
    13. Next i
    14. For i = 1 To Len(sOriginal)
    15. bakt = Asc(Mid(sOriginal, i, 1))
    16. bcode = Asc(Mid(sPassword, i, 1))
    17. VernamCode = VernamCode & Chr(bakt Xor bcode)
    18. Next i
    19. End Function
    20. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'So speicher ich die verschlüsselte Listbox
    21. Dim sw As New IO.StreamWriter("C:\Users\Christopher\Pictures\Test.txt", False)
    22. For i = 0 To ListBox2.Items.Count - 1
    23. sw.WriteLine(ListBox2.Items.Item(i).ToString)
    24. Next
    25. sw.Close()
    26. End Sub
    27. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' Und so lade ich die verschlüsselte Datei wieder
    28. Dim loader As New IO.StreamReader("C:\Users\Christopher\Pictures\Test.txt")
    29. ' Dim line As String
    30. 'line = loader.ReadLine()
    31. Do While loader.Peek() <> -1
    32. ListBox2.Items.Add(loader.ReadLine())
    33. Loop
    34. loader.Close()
    35. End Sub


    Hat vieleicht jemand ne Idee was hier falsch ist?
    Eigenschaften -> Verweise -> Microsoft.VisualBasic
    raus nehmen und dann siehst du was VB6 Müll ist :)
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Bei asc ist es :
    Convert.ToInt32()
    Bei chr ist es :
    System.Convert.ToChar()
    Bei mid must du dir mal String.Substring() ankucken :)
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Bei Mid String.SubString().

    //Edit 1:BlackNetworkBit war schneller ^^
    //Edit 2: Benutze bei StreamWriter und StreamReader einen Usingblock:

    VB.NET-Quellcode

    1. Using sw As New IO.StreamWriter("C:\Users\Christopher\Pictures\Test.txt", False)
    2. For i = 0 To ListBox2.Items.Count - 1
    3. sw.WriteLine(ListBox2.Items.Item(i).ToString)
    4. Next
    5. sw.Close()
    6. End Using

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TheVBTutorialsVB“ ()

    Danke. :)

    Hab den Verschlüsselungscode nun so abgeändert:

    VB.NET-Quellcode

    1. Public Function VernamCode(ByVal sOriginal As String, ByVal sPassword As String) As String
    2. Dim i As Long
    3. Dim aktPos As Long
    4. Dim bakt As Byte
    5. Dim bcode As Byte
    6. VernamCode = ""
    7. aktPos = 1
    8. For i = sPassword.Length + 1 To sOriginal.Length
    9. sPassword = sPassword & Mid(sPassword, aktPos, 1)
    10. aktPos = aktPos + 1
    11. If aktPos > sPassword.Length Then aktPos = 1
    12. Next i
    13. For i = 1 To sOriginal.Length
    14. bakt = Convert.ToInt32((Mid(sOriginal, i, 1)))
    15. bcode = Convert.ToInt32((Mid(sPassword, i, 1)))
    16. VernamCode = VernamCode & Convert.ToChar((bakt Xor bcode))
    17. Next i
    18. End Function


    Es wird aber immer noch Mid unterstrichen. in der MSDN sthet es aber auch nicht anders drin. Was hab ich falsch gemacht?
    wir haben doch dir schon geschriebn das du String.Substring() verwenden sollst.
    Mid existiert nun nicht mehr ;)
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Du musst Mid durch SubString ersetzten.
    msdn.microsoft.com/de-de/library/vstudio/aka44szs.aspx

    Beispiel:

    VB.NET-Quellcode

    1. Dim s As String = "Hallo Dieter!"
    2. MessageBox.Show(s.Substring(0, 5))


    Das ergäbe "Hallo".
    Aber beachte das der StartIndex bei 0 beginnt.

    Sorry hatte ich nicht gesehen.

    Hab es jetzt so und nun kommt der Fehler :Die Eingabezeichenfolge hat das falsche Format.

    VB.NET-Quellcode

    1. Public Function VernamCode(ByVal sOriginal As String, ByVal sPassword As String) As String
    2. Dim i As Long
    3. Dim aktPos As Long
    4. Dim bakt As Byte
    5. Dim bcode As Byte
    6. VernamCode = ""
    7. aktPos = 1
    8. For i = sPassword.Length + 1 To sOriginal.Length
    9. sPassword = sPassword & sPassword.Substring(aktPos, 1)
    10. aktPos = aktPos + 1
    11. If aktPos > sPassword.Length Then aktPos = 1
    12. Next i
    13. For i = 1 To sOriginal.Length
    14. bakt = Convert.ToInt32((sOriginal.Substring(i, 1))) ' HIER KOMMT FEHLER Die Eingabezeichenfolge hat das falsche Format.
    15. bcode = Convert.ToInt32((sPassword.Substring(i, 1)))
    16. VernamCode = VernamCode & Convert.ToChar((bakt Xor bcode))
    17. Next i
    18. End Function

    VB.NET-Quellcode

    1. CByte(Convert.ToInt32((sOriginal.Substring(i, 1))))

    probiere das mal :)
    @TheVBTutorialsVB
    Was mir jetzt noch so auffällt wäre, dass du deiner Funktion einen Wert zuweist, aber sie keinen Wert zurückgibt.

    ist auch erst mal egal hat er sehr wahrscheinlich nur zu testzwecken raus genommen :)
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Ich hab dem Programm mal Option Strict On gegeben und dann kamen erstmal viele Fehler. Hier die Funktion neu geschrieben:

    VB.NET-Quellcode

    1. Public Function VernamCode(ByVal sOriginal As String, ByVal sPassword As String) As String
    2. Dim aktPos As Long
    3. Dim bakt As Byte
    4. Dim bcode As Byte
    5. aktPos = 1
    6. Dim code As String = ""
    7. For i As Integer = sPassword.Length + 1 To sOriginal.Length
    8. sPassword = sPassword & sPassword.Substring(CInt(aktPos), 1)
    9. aktPos = aktPos + 1
    10. If aktPos > sPassword.Length Then aktPos = 1
    11. Next
    12. For i As Integer = 1 To sOriginal.Length
    13. bakt = CByte(Convert.ToInt32((sOriginal.Substring(i, 1))))
    14. bcode = CByte(Convert.ToInt32((sPassword.Substring(i, 1))))
    15. code &= Convert.ToChar((bakt Xor bcode))
    16. Next
    17. Return code
    18. End Function

    @TheVBTutorialsVB
    Ich glaube du hast den Sinn nicht verstanden warum wir im Forum helfen :)
    wir sind eigentlich nicht hier um Copy&paste Code raus zu geben :)

    [EDIT]
    so damit der POST jetzt nicht zu OFF TOPIC ist dachte ich mir ich spiel jetzt auch einen auf Copy&Past geber

    VB.NET-Quellcode

    1. Public Function VernamCode(ByVal sOriginal As String, ByVal sPassword As String) As String
    2. Dim aktPos As Long = 1
    3. VernamCode = String.Empty
    4. For i = sPassword.Length + 1 To sOriginal.Length
    5. sPassword &= sPassword.Substring(CInt(aktPos), 1)
    6. aktPos += 1
    7. If aktPos > sPassword.Length Then aktPos = 1
    8. Next
    9. For i = 1 To sOriginal.Length
    10. VernamCode &= Convert.ToChar((CByte(Convert.ToInt32((sOriginal.Substring(CInt(i), 1)))) Xor CByte(Convert.ToInt32((sPassword.Substring(CInt(i), 1))))))
    11. Next
    12. End Function
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BlackNetworkBit“ ()

    Hier ist die Meinung sehr geteilt. Ich bin der Meinung, dass wenn man etwas lernen will, man sehr gut aus C&P lernen kann. Wenn er sich den Code anguckt und ihn verstehen will, kann er das oder er lässt es bleiben. Das wäre aber nicht mein Problem, wenn man nichts lernen will hat man Pech. Außerdem hat er den Großteil selbst verbessert, geschrieben hat er ja sogar alles.

    Erstmal vielen Dank für eure Geduld mit mir. :)

    Leider kommt immer npch der gleiche fehler

    Ich poste mal das Programm wie ich es jetzt habe. Evtl hab ich ja noch ein paar Sünden begangen.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim sPassword As String = "PASS"
    3. Public Function VernamCode(ByVal sOriginal As String, ByVal sPassword As String) As String
    4. Dim aktPos As Long
    5. Dim bakt As Byte
    6. Dim bcode As Byte
    7. aktPos = 1
    8. Dim code As String = ""
    9. For i As Integer = sPassword.Length + 1 To sOriginal.Length
    10. sPassword = sPassword & sPassword.Substring(CInt(aktPos), 1)
    11. aktPos = aktPos + 1
    12. If aktPos > sPassword.Length Then aktPos = 1
    13. Next
    14. For i As Integer = 1 To sOriginal.Length
    15. bakt = CByte(Convert.ToInt32((sOriginal.Substring(i, 1))))
    16. bcode = CByte(Convert.ToInt32((sPassword.Substring(i, 1))))
    17. code &= Convert.ToChar((bakt Xor bcode))
    18. Next
    19. Return code
    20. End Function
    21. 'Public Function VernamCode(ByVal sOriginal As String, ByVal sPassword As String) As String
    22. ' Dim i As Long
    23. ' Dim aktPos As Long
    24. ' Dim bakt As Byte
    25. ' Dim bcode As Byte
    26. ' VernamCode = ""
    27. ' aktPos = 1
    28. ' For i = sPassword.Length + 1 To sOriginal.Length
    29. ' sPassword = sPassword & sPassword.Substring(aktPos, 1)
    30. ' aktPos = aktPos + 1
    31. ' If aktPos > sPassword.Length Then aktPos = 1
    32. ' Next i
    33. ' For i = 1 To sOriginal.Length
    34. ' bakt = CByte(Convert.ToInt32((sOriginal.Substring(i, 1))))
    35. ' bcode = CByte(Convert.ToInt32((sPassword.Substring(i, 1))))
    36. ' VernamCode = VernamCode & Convert.ToChar((bakt Xor bcode))
    37. ' Next i
    38. 'End Function
    39. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    40. BGW_MONAT.RunWorkerAsync()
    41. End Sub
    42. Private Sub BGW_MONAT_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BGW_MONAT.DoWork
    43. Dim pfad As String = "C:\MONAT.txt"
    44. Dim Zeilenzahl As Integer = IO.File.ReadAllLines(pfad).Count
    45. Dim lines() As String = IO.File.ReadAllLines(pfad)
    46. For i = 0 To Zeilenzahl - 1
    47. Threading.Thread.Sleep(0)
    48. BGW_MONAT.ReportProgress(i, lines(i))
    49. Next
    50. End Sub
    51. Private Sub BGW_MONAT_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BGW_MONAT.ProgressChanged
    52. Dim daten As String = e.UserState
    53. If daten <> "" Then
    54. ListBox1.Items.Add(daten.Replace(" ", ""))
    55. Zeilen_MONAT.Text = e.ProgressPercentage
    56. End If
    57. End Sub
    58. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    59. For i = 0 To ListBox1.Items.Count - 1
    60. Dim STRING_Array_PreCrypt() As String = ListBox1.Items.Item(i).ToString.Split(";")
    61. Dim STRING_Array_Crypt As String = VernamCode(STRING_Array_PreCrypt(0), sPassword)
    62. For a = 1 To STRING_Array_PreCrypt.Length - 1
    63. STRING_Array_Crypt += ";" + VernamCode(STRING_Array_PreCrypt(a), sPassword)
    64. Next
    65. ListBox2.Items.Add(STRING_Array_Crypt)
    66. Next
    67. End Sub
    68. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    69. For i = 0 To ListBox2.Items.Count - 1
    70. Dim STRING_Array_PreDeCrypt() As String = ListBox2.Items.Item(i).ToString.Split(";")
    71. Dim STRING_Array_DeCrypt As String = VernamCode(STRING_Array_PreDeCrypt(0), sPassword)
    72. For a = 1 To STRING_Array_PreDeCrypt.Length - 1
    73. STRING_Array_DeCrypt += ";" + VernamCode(STRING_Array_PreDeCrypt(a), sPassword)
    74. Next
    75. ListBox3.Items.Add(STRING_Array_DeCrypt)
    76. Next
    77. End Sub
    78. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    79. Using sw As New IO.StreamWriter("C:\Users\Christopher\Pictures\Test.txt", False)
    80. For i = 0 To ListBox2.Items.Count - 1
    81. sw.WriteLine(ListBox2.Items.Item(i).ToString)
    82. Next
    83. sw.Close()
    84. End Using
    85. End Sub
    86. Private Sub BGW_Laden_Crypt_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BGW_Laden_Crypt.DoWork
    87. Dim pfad As String = "C:\Users\Christopher\Pictures\Test.txt"
    88. Dim Zeilenzahl As Integer = IO.File.ReadAllLines(pfad).Count
    89. Dim lines() As String = IO.File.ReadAllLines(pfad)
    90. For i = 0 To Zeilenzahl - 1
    91. Threading.Thread.Sleep(0)
    92. BGW_Laden_Crypt.ReportProgress(i, lines(i))
    93. Next
    94. End Sub
    95. Private Sub BGW_Laden_Crypt_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BGW_Laden_Crypt.ProgressChanged
    96. Dim daten As String = e.UserState
    97. ListBox2.Items.Add(daten)
    98. Zeilen_MONAT.Text = e.ProgressPercentage
    99. End Sub
    100. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    101. Dim loader As New IO.StreamReader("C:\Users\Christopher\Pictures\Test.txt")
    102. Do While loader.Peek() <> -1
    103. ListBox2.Items.Add(loader.ReadLine())
    104. Loop
    105. loader.Close()
    106. End Sub
    107. End Class


    Nochamls vielen vielen Dank für eure Geduld :) :) :)
    Sende uns doch bitte die detaillierte Fehlermeldung sonnst können wir nicht
    nachvollziehen was du falsch machst da wir nicht die Datei haben :)

    mal so eine Frage ist sOrginal nicht Größer als das PW ?

    VB.NET-Quellcode

    1. For i As Integer = 1 To sOriginal.Length
    2. bakt = CByte(Convert.ToInt32((sOriginal.Substring(i, 1))))
    3. bcode = CByte(Convert.ToInt32((sPassword.Substring(i, 1)))) ' Hier könnet die nächste exeption enstehen :D
    4. code &= Convert.ToChar((bakt Xor bcode))
    5. Next


    VB.NET-Quellcode

    1. bcode = CByte(Convert.ToInt32((sPassword.Substring(i, 1)))) ' sOrginal ist z.b "Otto" das PW ist z.b "123" dann würde Hier eine exeption entstehen da sPassword ja nur 3 Zeichen hat und sOriginal 4 Zeichen hat und die For-Schleife bis 4 Geht würde der letzte durchlauf eine Exeption spucken

    wäre ja dann falsch oder ?

    und probiere doch bitte mal das :

    VB.NET-Quellcode

    1. For i As Integer = 0 To sOriginal.Length -1 ' ein string beginnt bei 0 und endet bei Length aber da der index bei NULL ist müssen wir einen Index abziehen (Length-1)
    2. bakt = CByte(Convert.ToInt32((sOriginal.Substring(i, 1))))
    3. bcode = CByte(Convert.ToInt32((sPassword.Substring(i, 1)))) ' Hier könnet die nächste exeption enstehen :D
    4. code &= Convert.ToChar((bakt Xor bcode))
    5. Next
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BlackNetworkBit“ ()