Vernam Verschlüsselung speichern

  • VB.NET

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

    Da sind ein paar Fehler allein dadurch, dass du Option Strict Off hast. Schreib mal über "Public Class Form1" "Option Strict On". Dann werden dir die Fehler angezeigt, die kannst du aber sehr leicht lösen indem du die Typen konvertierst. Außerdem würde ich mal die vielen Leerzeilen entfernen, dass ist sonst echt unübersichtlich ;)

    Kuck dir mal bitte den Post an den ich nachträglich editiert habe :
    [VB 2010] Vernam Verschlüsselung speichern
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    So habe es jetzt glaube ich fertig gekriegt :)

    VB.NET-Quellcode

    1. Private Function verentschluesseln(ByVal orig As String, ByVal key As String) As String
    2. Dim ret As String = String.Empty
    3. For i = 0 To orig.Length - 1
    4. Dim o As Char = orig.Substring(i, 1)(0)
    5. Dim p As Char
    6. If key.Length - 1 > i + 1 Then p = key.Substring(i, 1)(0)
    7. ret &= Convert.ToChar(Convert.ToInt32(o) Xor Convert.ToInt32(p))
    8. Next
    9. Return ret
    10. End Function

    vielleicht ist es Falsch schlagt mich nicht :pinch:
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Ich könnt dich knutschen :) :) :)

    Verschlüsselung funktioniert wieder.

    Aber wenn ich jetzt die verschlüsselte Lsitbox als TXT speicher und wieder lade sind statt 9.014 um die 16.000 Zeilen geladen worden, obwohl in der verschlüsselten Listbox wie in der TXT selbst nur 9.014 Zeilen sind.
    ;) danke nicht nötig,
    Probiere das mal :
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim sPassword As String = "PASS"
    3. Private Function verentschluesseln(ByVal orig As String, ByVal key As String) As String
    4. Dim ret As String = String.Empty
    5. For i = 0 To orig.Length - 1
    6. Dim o As Char = orig.Substring(i, 1)(0)
    7. Dim p As Char
    8. If key.Length - 1 > i + 1 Then p = key.Substring(i, 1)(0)
    9. ret &= Convert.ToChar(Convert.ToInt32(o) Xor Convert.ToInt32(p))
    10. Next
    11. Return ret
    12. End Function
    13. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    14. BGW_MONAT.RunWorkerAsync()
    15. End Sub
    16. Private Sub BGW_MONAT_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BGW_MONAT.DoWork
    17. Dim pfad As String = "C:\MONAT.txt"
    18. Dim lines() As String = IO.File.ReadAllLines(pfad)
    19. For i = 0 To lines.Length - 1
    20. BGW_MONAT.ReportProgress(i, lines(i))
    21. Next
    22. End Sub
    23. Private Sub BGW_MONAT_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BGW_MONAT.ProgressChanged
    24. Dim daten As String = CStr(e.UserState)
    25. If daten <> String.Empty Then
    26. ListBox1.Items.Add(daten.Replace(" ", String.Empty))
    27. Zeilen_MONAT.Text = e.ProgressPercentage
    28. End If
    29. End Sub
    30. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    31. For i = 0 To ListBox1.Items.Count - 1
    32. Dim STRING_Array_PreCrypt() As String = ListBox1.Items.Item(i).ToString.Split({";"}, StringSplitOptions.RemoveEmptyEntries)
    33. Dim STRING_Array_Crypt As String = verentschluesseln(STRING_Array_PreCrypt(0), sPassword)
    34. For a = 0 To STRING_Array_PreCrypt.Length - 1
    35. STRING_Array_Crypt &= ";" & verentschluesseln(STRING_Array_PreCrypt(a), sPassword)
    36. Next
    37. ListBox2.Items.Add(STRING_Array_Crypt)
    38. Next
    39. End Sub
    40. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    41. For i = 0 To ListBox2.Items.Count - 1
    42. Dim STRING_Array_PreDeCrypt() As String = ListBox2.Items.Item(i).ToString.Split({";"}, StringSplitOptions.RemoveEmptyEntries)
    43. Dim STRING_Array_DeCrypt As String = verentschluesseln(STRING_Array_PreDeCrypt(0), sPassword)
    44. For a = 0 To STRING_Array_PreDeCrypt.Length - 1
    45. STRING_Array_DeCrypt &= ";" & verentschluesseln(STRING_Array_PreDeCrypt(a), sPassword)
    46. Next
    47. ListBox3.Items.Add(STRING_Array_DeCrypt)
    48. Next
    49. End Sub
    50. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    51. Dim sw As New IO.StreamWriter("C:\Users\Christopher\Pictures\Test.txt", False)
    52. For i = 0 To ListBox2.Items.Count - 1
    53. sw.WriteLine(ListBox2.Items.Item(i).ToString)
    54. Next
    55. sw.Close()
    56. End Sub
    57. Private Sub BGW_Laden_Crypt_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BGW_Laden_Crypt.DoWork
    58. Dim lines() As String = IO.File.ReadAllLines("C:\Users\Christopher\Pictures\Test.txt")
    59. For i = 0 To lines.Length - 1
    60. BGW_Laden_Crypt.ReportProgress(i, lines(i))
    61. Next
    62. End Sub
    63. Private Sub BGW_Laden_Crypt_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BGW_Laden_Crypt.ProgressChanged
    64. Dim daten As String = CStr(e.UserState)
    65. ListBox2.Items.Add(daten)
    66. Zeilen_MONAT.Text = e.ProgressPercentage
    67. End Sub
    68. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    69. Dim line As String() = IO.File.ReadAllLines("C:\Users\Christopher\Pictures\Test.txt")
    70. For i = 0 To line.Length - 1
    71. ListBox2.Items.Add(line(i))
    72. Next
    73. End Sub
    74. End Class


    Schick mal die verschlüsselte Datei :) sonnst wird das schwer nachzuvollziehen sein :)

    PS gibt einen Hilfreich Button :) (unten links bei jedem Post)
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise

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

    Hab mal einfach C&P gemacht um zu testen und es kommt hierbei zu folgendem Fehler:

    VB.NET-Quellcode

    1. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    2. For i = 0 To ListBox1.Items.Count - 1
    3. Dim STRING_Array_PreCrypt() As String = ListBox1.Items.Item(i).ToString.Split({";"}, StringSplitOptions.RemoveEmptyEntries)
    4. Dim STRING_Array_Crypt As String = verentschluesseln(STRING_Array_PreCrypt(0), sPassword) ' FEHLER: Der Index war außerhalb des Arraybereichs.
    5. For a = 0 To STRING_Array_PreCrypt.Length - 1
    6. STRING_Array_Crypt &= ";" & verentschluesseln(STRING_Array_PreCrypt(a), sPassword)
    7. Next
    8. ListBox2.Items.Add(STRING_Array_Crypt)
    9. Next
    10. End Sub


    Die verschlüsselte Datei muss ihc erst bearbeiten zum hochladen da diese geheime Daten enthält. Kann diese morgen hier hochladen.

    Muss leider jetzt off weil meine Mum will das ich schlafen gehen soll *nerv*

    Aber bis hierhin vielen Dank für Geduld und Hilfe

    PS: Wo ist der Hilfreich Button ?
    ok dann warten wir auf morgen :)
    ich glaube das es daran liegt das durch die verschlüsselung auch Newlines enstehen können die wir
    dann Splitten also müsstest du das einfach ersetzen z.b in "#000#" oder sowas :) und vola es wird wieder ordentlich gesplittet :)
    Unten links bei jedem post also :
    Rechts Weiter,

    WEITER nach rechts

    Hier Drunter :D :D-------------------------
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise

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

    probiere mal das :

    VB.NET-Quellcode

    1. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    2. For i = 0 To ListBox1.Items.Count - 1
    3. Dim STRING_Array_PreCrypt() As String = ListBox1.Items.Item(i).ToString.Split({";"}, StringSplitOptions.RemoveEmptyEntries)
    4. If STRING_Array_PreCrypt.Length - 1 >= 0 Then
    5. Dim STRING_Array_Crypt As String = verentschluesseln(STRING_Array_PreCrypt(0), sPassword) ' FEHLER: Der Index war außerhalb des Arraybereichs.
    6. For a = 0 To STRING_Array_PreCrypt.Length - 1
    7. STRING_Array_Crypt &= ";" & verentschluesseln(STRING_Array_PreCrypt(a), sPassword)
    8. Next
    9. ListBox2.Items.Add(STRING_Array_Crypt)
    10. End If
    11. Next
    12. End Sub


    und dass :

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Using sw As New IO.StreamWriter("C:\Users\Christopher\Pictures\Test.txt", False)
    3. For i = 0 To ListBox2.Items.Count - 1
    4. If listbox2.Items.item(i).startwith(";") = False Then
    5. sw.WriteLine(ListBox2.Items.Item(i).ToString)
    6. End If
    7. Next
    8. sw.Close()
    9. End Using
    10. End Sub
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Verhaut er leider auch.

    Dies ist ja eine Xor Verschlüsselung soweit ich das verstehe. Hierbei entstehen ja auch Zeichen die der PC nicht als ascii anzeiden kann ( und die dann leer bleiben ) und ich meine das an solchen stellen die Zeile schon beim laden abgebrochen wird und in der nächsten Zeile fortgeführt wird.

    Hab das Programm mal beim laden angehalten und bei lines.lenght kommt schon 11400 anstatt 9014.


    EDIT:

    Hab alles nochmal sauber in einem neuen Programm gemacht. Als passwort hab ich diesmal eine lange buchstabenkette genommen bsp: "kdsjlhkjdhgjkdfhgjkfdhgkjdghkdhgkjd" hierbei sind diesmal keine leeren Felder bei der verschlüsselung entstanden.

    Ich konnte die verschlüsselten daten speichern und auch wieder ordentlich laden. Also hängt es wirklich an den Zeichen die der PC nicht darstellen kann. Aber slebst mit der langen buchstrabne kette kann ihc doch nicht 100% sicher sein das es nbiciht wirder ein leeres Zeichen geben wird, oder?

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

    Wenn die Daten nicht unbedingt String sind, versuch's doch mal mit dem BinaryReader/-Writer

    Alternativ könnte man wohl auch die Zeilen als ganzes verschlüsseln oder direkt einen CryptStream nehmen. Die verschlüsselten Werte braucht ja wahrscheinlich eh keiner (also zum Lesen oder so).

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

    Hi
    hast du den Code hier mal angeschaut?
    [VB.NET] vernam verschlüsselung

    aufpassen: Texte und nicht gleichverteilte Resourcen bzw. Resourcen, die in einen "semantischen Zusammenhang" einordnbar sind lassen sich bei Vernam sehr einfach entschlüsseln, wenn man über die Entropie herangeht. Bestimmte Buchstaben oder Datenfolgen kommen dann ja häufiger vor, folgen aus anderen Daten oder sind konstant. Bei groß genugen Datenmengen kommt man dann ggf. wieder auf das ursprüngliche, sofern der Schlüssel nicht mindestens so groß ist, wie der zu übertragende Datenstrom und nicht "invertierbar" (z.B. wäre über einen random number generator, wie dem in System.Security.Cryptography, sicherer - die Random-Klasse ist in der Hinsicht ungeeignet).

    Gruß
    ~blaze~
    Hi

    Super vielen Dank für all eure Hilfe und Antworten.

    Das mit der Möglichen Entschlüsselung ist mir auch aufgefallen, da aber Preise hier verschlüsselt werden kann sich der "Datendieb" nie ganz sicher sein das genau die Zahl richtig ist.

    Das Speicherproblem hab ich über das verwendete Password gelöst. Da es sich nur um Zahlen handelt hab ich als Passwort nur großbuchstaben verwendet und keine Probleme mehr.

    Aber um die Sicherheit zu erhöhen hab ich nun eine neue Verschlüsselungsmethode verwendet. AES Verschlüsselung.

    Aber Ihr alle habt mir sehr geholfen in das Thema Verschlüsselung rein zu kommen. Vielen vielen Dank ;)