Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Entschlüsseln eines überlagerten Strings (Arrays) (https://www.delphipraxis.net/155903-entschluesseln-eines-ueberlagerten-strings-arrays.html)

Caps 12. Nov 2010 13:47

Entschlüsseln eines überlagerten Strings (Arrays)
 
Einen schönen Tag,

ein Kumpel hat mir folgende Aufgabe gestellt, und ich habe noch keine Lösung dafür. Es handelt sich um sportliche Kryptographie (:wink:), vielleicht hat eine(r) von Euch eine Inspiration für mich...

Er hat sich folgendes ausgedacht:

1. Zunächst bilden wir Buchstaben auf Zahlen ab, z.B. mithilfe der alten ASCII-Tabelle (Buchstaben, Zahlen und ein paar Sonderzeichen reichen aus). Wir erhalten also Zahlen zwischen 0 und 127 pro Zeichen.

2. Dann bauen wir die Nachricht zusammen. ABBA würde also zu einem Array derart werden: (65, 66, 66, 65).

3. Wir erzeugen ein Nullen-Array beliebiger Länge R = (0, 0, 0, 0, 0, 0, 0, 0, 0).
3.1 Wir wählen eine beliebige Position innerhalb des Arrays und addieren den ASCII-Wert der Buchstaben unserer Nachricht auf die Werte der korrespondierenden Stellen in R.

Beispiel:
Wir wählen die Stelle 1 und addieren ABBA auf R:
Code:
(0, 0, 0, 0, 0, 0, 0, 0, 0) +       // Leeres Array
(65,66,66,65) =                     // Stelle 1
(65,66,66,65, 0, 0, 0, 0, 0)        // Zwischenergebnis
3.2 Wir machen das ein paar mal.... (wie oft genau ist beliebig)

Beispiel (wir wählen die Stelle 3 und dann noch die Stelle 6 und addieren jeweils ABBA drauf (auch gern mehrmals auf die selbe Position)):
Code:
(65,66,66, 65, 0, 0, 0, 0, 0) +     // Zwischenergebnis von eben
(0, 0, 65, 66, 66,65) +             // Stelle 3
(0, 0, 0, 0, 0, 65,66,66,65) =      // Stelle 6
(65,66,131,131,66,130,66,66,65)     // Endergebnis

Das Endergebnis (65,66,131,131,66,130,66,66,65) wird dann übermittelt.
Die Aufgabe besteht darin, den Klartext ABBA wiederherzustellen.

Der Klartext braucht nicht natürlichsprachig zu sein, sondern z.B. eine Base64-Kodierung einer Datendatei.

Die Länge des Klartextes sei bekannt (öffentlich, kein Geheimnis). (In diesem Beispiel ('ABBA') ist sie gleich 4)
Dennoch finde ich keine Herangehensweise an die Lösung. Insbesondere Durchprobieren erscheint sehr komplex, wenn die Klartextlänge groß wird (--> 500 Zeichen o.ä.)

Hat jemand ne Idee?
Es gibt auch ein Eis als Belohnung (... für einen zuverlässigen Algorithmus) :P:party::hello:

Schöne Grüße
Caps

Neutral General 12. Nov 2010 14:03

AW: Entschlüsseln eines überlagerten Strings (Arrays)
 
Hallo,

Kann es da überhaupt eine eindeutige Entschlüsselung geben?

A = (2,2,2)
B = (3,3,3)

0 = (0,0,0)

0 + 3*A = (6,6,6)
0 + 2*B = (6,6,6)

Also was ist (6,6,6) jetzt? Ist es entschlüsselt (2,2,2) oder (3,3,3)?

Also ich behaupte einfach mal (ganz ohne mich großartig mit der Sache auszukennen) dass der Algorithmus SO nicht funktioniert.

Caps 12. Nov 2010 14:07

AW: Entschlüsseln eines überlagerten Strings (Arrays)
 
Ja, unter Kenntnis des "Passwortes" gibt es eine eindeutige Entschlüsslung. In meinem Beispiel ist das Passwort "101001" (also einmal an Stelle 1, einmal an Stelle 3 und einmal an Stelle 6 das Wort ABBA addieren)

[Edit]Entschuldigung, ich habe das Passwort einfach so unterschlagen...*zwinker*, aber klar, das ist natürlich ein sehr wichtiger Bestandteil.[/Edit]

Neutral General 12. Nov 2010 14:10

AW: Entschlüsseln eines überlagerten Strings (Arrays)
 
OK, mit Passwort klappts natürlich^^ Algorithmus.. Mal überlegen.. mhhh

Edit: Nein so kanns auch nicht gehen. Man weiß ja nicht was man jeweils abziehen muss. Und wenn mans weiß, dann hat man auch direkt den Klartext, also warum noch addieren? :gruebel:

Caps 12. Nov 2010 14:32

AW: Entschlüsseln eines überlagerten Strings (Arrays)
 
Ja, das stimmt leider. Die Kenntnis des Passwortes verringert eigentlich nur die Anzahl der Möglichkeiten, die man mit Brute Force durchprobieren muss. Also hier muss man einen vierstelligen Klartext finden, der an drei Stellen genau einmal vorkommt. Eine gewisse Erleichterung aber keine Lösung, ich sollte nochmal rückfragen ;-).


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz