Kleines Konsolen-Entschlüsselungsprogramm

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Gather.

    Kleines Konsolen-Entschlüsselungsprogramm

    Hallo zusammen

    Ich will ein Konsolen-Programm erstellen, mit welchem ich eine Eingabe machen kann z.B. hlaelultoe und raus kommt: hallo leute.
    Leider komme ich nicht mehr weiter, d.h. ich bin schon von Anfang an gescheitert :(


    Hoffentlich könnt ihr mir helfen.
    Oder du erklärst mal, wie diese Verschlüsselungsart funktioniert, dann können wir dir auch sicher weiterhelfen.

    EDIT: Willkommen im Forum

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

    Die Verschlüsselungsart wäre, dass ich die Anzahl Wörter und den verschlüsselten Satz eingebe.

    Wenn ich also hwaelllto eingebe und als Anzahl Wörter 2, wird die Variable für Wort1 mit dem 1., 3., usw Buchstaben gefüllt und die Variable Wort2 mit dem 2., 4., usw Buchstaben.
    Dann ist Wort1 "hallo" und Wort2 "welt"

    Jedoch habe ich bemerkt, dass es unmöglich ist, wenn nicht beide Wörter gleich lange sind.
    @user5645421: Wieso sollte das unmöglich sein?
    Wenn ich das nicht absolut falsch verstehe:

    Ne For Schleife, und dann immer bis xyz (anzahl der Wörter) zählen und die
    Buchstaben in ein Array der Größe xyz packen, dann auslesen.

    Problem?
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    @Nikx

    Wenn du z.B. die Wörter Nikx und nafets3646 verschmilzt, ergibt das Nniakfxets3646, da das erste Wort kürzer ist. Entschlüsselt gibt das dann Nikxt34 und nafes66. Verstanden?
    Verdammt, stimmt :D
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Hi
    wenn die Anzahl der Leerzeichen auch passt, kannst du es einfach über ein Dictionary lösen. Da ist dann ein Dictionary(Of Integer, IList(Of String)) passend oder ein Dictionary(Of Integer, String)(). Beim Dictionary(Of Integer, IList(Of String)) gibt dir der Schlüssel einen Xor-basierten Hash an, beim Dictionary(Of Integer, IList(Of String))() wird der Index über die Wortlänge angesprochen. Anschließend permutierst du die Buchstaben pro Wort, Satz oder String durch und überprüfst, ob Wörter davon erkannt werden. Bei einem Xor-Hash sind die Hashwerte für alle Permutationen gleich, wenn du sie nach folgender Funktion berechnest:

    VB.NET-Quellcode

    1. Public Shared Function XorHash(ByVal input As String) As Integer
    2. Dim hash As Integer = 0
    3. Dim ind As Integer = 0
    4. While ind < input.Length
    5. If Char.IsSurrogatePair(input, ind) Then
    6. hash = hash Xor (Asc(input(ind)) << 16)
    7. ind += 1
    8. End If
    9. hash = hash Xor Asc(input(ind))
    10. ind += 1
    11. End While
    12. Return hash
    13. End Function

    Somit kannst du der Permutation zugehörige Werte zumindest schon mal filtern. Wenn du IList(Of String) mit einem IDictionary(Of Char(), IList(Of String)) vertauschst und das Array jeweils sortiert ist, kannst du eben noch nach den auftretenden Buchstaben direkt filtern. Da könntest du ggf. den Hash auch entfernen. Damit wäre das Verfahren dann auch ggf. performanter. Der Vorteil vom Hashcode-basierten Verfahren ist auf jeden Fall, dass die Sortierung bzw. quasi binäre Suche wegfällt. Wichtig ist halt, dass du alle Permutationen des Wortes durchgehen musst - inklusive möglicher Leerzeichen und das ist dann schon sehr zeitraubend trotz Multithreading.
    Edit1: Btw., wenn du eine Funktion für die Buchstaben entwirfst, die 16 Bit auf 32 Bit mapt, kannst du die häufiger auftretenden Buchstaben besser kombinieren und damit eine bessere Unterscheidung finden.
    Edit2: AscW mit Asc ersetzt, ist ja Blödsinn.

    Gruß
    ~blaze~

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

    Lol.

    Egal, @TE google einfach mal nach Verschlüsselungsarten wie: AES, Xor, Caesar usw.
    Desweiteren habe ich mal eine Verschlüsselungslibrary gecodet:
    [Release] EasyCrypt - Verschlüsselungslibrary
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!