Autor Beitrag
Diach
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Fr 20.12.02 11:32 
Hi! :wink:

Ich hab da mal ne Frage (habt ihr euch schon gedacht)!
Und zwar hab ich folgendes Problem: Ich würde gerne wissen, wie ich mit Delphi einen String mit einem beliebigen Schlüssel verschlüsseln kann.
und was mich auch sehr intersessieret, wie ich, wenn ich normalen String + verschlüsselten String hab, dan Schlüssel herausbekomme.
Ist ein Projekt für die Schule und unser Lehrer meint, es wäre ein einfaches mathematisches Problem...

Danke schonmal im Voraus,
Diach
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 20.12.02 16:00 
Hallo!

zur ersten Frage: ich habe mich noch nicht damit beschäftigt, aber im Gegensatz zu Java stellt Delphi - soweit ich weiß - keine Verschlüsselungsalgorithmen bereit. Die muss man entweder selbst schreiben oder aber als Unit irgendwo besorgen (runterladen).

zur zweiten Frage: ich bin mir ziemlich sicher, dass Dein Lehrer das auf eine bestimmte Verschlüsselungsmethode bezogen hat. Das allgemein zu behaupten ist absoluter Schwachsinn, weil das eine der Dinge ist, die man nach Möglichkeit ausschließen will, wenn man einen Verschlüsselungsalgorithmus konzipiert. Wenn Du Dir mal den RSA-Algoritgmus anschaust, wirst Du schnell sehen, dass das mit heutigen Mitteln nicht möglich ist.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Savage
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 110



BeitragVerfasst: Fr 20.12.02 16:41 
Hi,

dein Lehrer geht bestimmt nur von einem ganz einfachen Prinzip aus.

A = 1 Zeichen von einen String
B = 1 Zeichen vom Schlüssel
C = 1 Codiertes Zeichen

Die jeweiligen Zeichen in Zahlen umwandeln, diese addieren oder subtrahieren oder sonst für ne Opperation ausführen und das Ergebnis wieder in einen Zeichen umwandeln.

Verschlüsselung:

A + B = C

Um den Schlüssel heraus zubekommen:

B = C - A

Das ist wohl die einfachste und unsicherste Methode.

MfG
Savage
Zaubär
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99



BeitragVerfasst: Fr 20.12.02 20:44 
Besser wäre:

A XOR B = C

:wink:
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: Sa 21.12.02 00:36 
Oder ein A+ F(A) = C
Damit ist der Schlüssel nicht satisch sondern eine Funktion. Somit ist er nur für A definiert und man müsste schon die Logik der Funktion wissen um ein anderes A zu entschlüsseln. (Was natürlich auch möglich ist)

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Diach Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: So 22.12.02 15:10 
äähhmm
Also ich weiss nicht so genau was damit anzufangen!
gemeint war es so:

Ich habe:
1. einen String mit höchstens sagen wir mal 8 zeichen
2. keienen Schlüssel
3. Das Ergebnis der Verschlüsselung!

Ich soll sozusagen den Code Knacken, mit dem verschlüsselt wurde!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 22.12.02 16:13 
Tja, das ist natürlich nicht gerade viel. Ich würde mir das ganze mal nicht als Buchstaben sondern als Zahlen aufschreiben. Also 1 statt 'A' und so weiter und dann Klartext und codierten Text mal (jeweils als Zahlenfolge) untereinander schreiben.

Dann würde ich mal gucken, wieweit jeweils eine Zahl im Klartext und die entsprechende Zahl im kodierten Text auseinaderliegen. Vielleicht immer gleich weit? Oder erkennst Du andere Muster? (Manchmal muss man 'ne Weile damit rumspielen, bis man was findet!)

Ach ja, poste doch mal Klartext und codierten Text.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: So 22.12.02 16:22 
Dazu musst Du die zugrunde liegende Funktion wissen.

Angenommen es handelt sich um eine einfache Addition nach dem Schema: Orginal + Schlüssel = Ergebnis. Dann kannst die Formel einfach umkehren. Schlüssel = Ergebnis - Original.

Daß man das ganze natürlich mit den Ordinalwerten der einzelnen Zeichen machen muß ist Dir ja klar. Oder?

Wenn die Verschlüsselung natürlich auf einer anderen Berechnung basiert, dann musst Du diese Formel nach Schlüssel auflösen.

Ohne die Formel zu kennen wirst Du Pech haben.
Auch wenn ich Dir zB 100 Original-Ergebnis-Paare aus meiner Verschlüsselung senden würde, denke ich nicht, daß Du den Code knacken könntest. (Wobei meine Verschlüsselung auch nur auf einer Formel basiert.)

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Diach Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: So 22.12.02 21:48 
Naja mir wurde das mal mit Matrizenmultiplikation erklärt!
Soweit ich weiss, liefert Delphi auch eine solche Funktion:
Man gibt den Text ein, gibt einen Schlüssen áls Parameter ein und das ergebnis ist dann irgend ein Kauderwelsch, wie es ja auch gewollt ist!
Sledge_Hammer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32

Win 98 SE, Win XP
D7 Prof
BeitragVerfasst: So 22.12.02 22:22 
Poste doch mal das ergebnis der verschlüsselung!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 22.12.02 22:57 
Das mit der Matrizenmultiplikation haben wir vor ... ähm .... 2 oder 3 Jahren auch mal gemacht. Sollte das Finden des Schlüssels dann nicht auf das Lösen eines (ziemlich großen) Systems von linearen Gleichungen hinauslaufen? Oder habe ist es bei mir doch schon etwas zu lange her, seit ich das gemacht habe?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Diach Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Mo 23.12.02 15:27 
das Ergebnis der verschlüsselung soll völlig frei wählbar sein!
das Programm soll leisten:

String mit bel. schlüssel verschlüsseln
String wieder entschlüsseln
Schlüssel an Hand von Vorher-Nachher herausfinden.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 23.12.02 15:54 
Und wenn Du die Verschlüsselung anhand einer Matrizenmultiplikation machst, dann wird der letzte Punkt auf Deiner Liste darauf hinauslaufen, ein lineares Gleichungssystem zu lösen. Es wäre nicht schlecht, wenn Du mal ein paar Details posten könntest, zu dem, was Dein Lehrer Euch gesagt hat. Besonders wichtig sind Details zu der Matrizenmultiplikation.

Ich stelle mir das ganze so vor: Du hast die Matrix K zum kodieren, die Matrix A, in der Du den Klartext speicherst und mit A*K=B erhälst du als B den verschlüsselten Text. Wenn Du A und B gegeben hast, dann berechnest Du die inverse Matrix von A, multiplizierst auf beiden Seiten der Gleichung von Links damit, und hast Dein K berechnet als K=inv(A)*B.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Diach Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Di 24.12.02 03:09 
genau dass müsste es sein! so hab ich mir das auch gedacht!
mein lehrer hält sich für einen spassvogel und denkt, dass er uns immer aufgaben geben muss, die wir nie lösen können und dann auf einmal mit der voll trivialen lösung kommt...

kann mir das auch nur so vorstellen!

gibt elphi nich auch eine Funktion vor, die das verschlüsseln leistet?
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Di 24.12.02 12:07 
Zaubär sagte es schon: XOR Technik.

Sie ist nicht genial, so ohne weiteres kriegst du sie aber auch nicht geknackt. Die schnellste Methode (extrem trivial). Du brauchst ein Editfeld und ein Button:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  s: String;
begin
  s := Edit1.Text;
  for i := 1 to Length(s) do s[i] := Chr(Ord(s[i]) xor 64);
  Edit1.Text := s;
end;


Einmal klicken und es wird verschlüsselt, ein weiteres mal klicken und es wird entschlüsselt.

Hier im Beispiel wird mit der Zahl 64 verschlüsselt. Du kannst aber jede Zahl zwischen 0 und 255 nehmen. Noch besser ist, wenn du ein String nimmst und abwechselnd eine andere Zahl nimmst (generiert aus dem Buchstaben).

Sei bitte mal nicht geschockt wenn es mal nicht funktioniert und der String plötzlich verschwindet. Das liegt einfach daran, daß bei der Xor-Technik auch mal eine Null das Ergebnis sein kann. Leider schneidet Edit alles was nach eiuner Null kommt ab. Das ist aber kein Bug, sondern normal. Wenn du nicht das Editfeld verschlüsselst (wer macht das schon), sondern ein String, dann merkst du das nicht. Für ein String ist die Ascii Null auch nur ein Zeichen. Für Edit ist Ascii Null das Ende des Strings. Wie du siehst ist es kein Bug. ich wollte das nur bemerken, dammit du keine buse Überaschiung erlebst wenn du Editfelder verschlüsselst. Also immer nur Strings verschlüsseln. Edit habe ich hier nur beim Beispiel gewählt.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 24.12.02 13:24 
@Diach: mir ist leider eingefallen, dass das ganze einen Haken hat: A muss eine quadratische Matrix sein, damit man sie invertieren kann. Das ist wahrscheinlich aber nicht gegeben. Besonders nicht, wenn Du mit 8 Zeichen rechnest.

Dann bleibt Dir leider nur noch eine Lösung: für die einzelnen (noch unbekannten) Elemente von K setzt Du Variablen ein, rechnest damit das Produkt A*K aus und setzt das Ergebnis mit B gleich. Du bekommst dann soviele Gleichungen, wie Du Elemente in B hast (weil ja jedes Element von B mit dem entsprechenden Element von A*K gleich sein muss.). In Deinem Fall bekommst Du also maximal 8 Gleichungen. Ist nicht wirklich toll, oder?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Diach Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Di 24.12.02 14:06 
@ peter: Nee ist nicht wirklich soo toll wie ich gedacht hab! :wink:
Aber macht nix! Trotzdem vielen Dank!

@popov: Danke! Ich werd das mal so probieren! wenn ich die in deinem Beispiel verwendete Zahl 64 als schlüssel, variabel einsetze, müsste das mit dem knacken das Schlüssels mittels Schleife auch klappen!

Diach
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Di 24.12.02 14:22 
Wenn du nur mit einer Zahl arbeitest, dann ja. In der Regel nimmt man aber eine Menge an Zahlen die man z.B. aus einem Kennwort gewinnen kann.

ausblenden Quelltext
1:
2:
   S := 'Der ASCII-Code für "c" ist ' + IntToStr(Ord('c')) +  ' (dezimal)';
   MessageDlg(S, mtInformation, [mbOk], 0);


Ein Wort ergibt dann schon eine Menge an Zahlen. Aber auch schon zwei Zahlen reichen aus um die Sache mit der Schleife auszuhebeln.
Diach Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Di 24.12.02 19:53 
Stimmt!
Und wenn ich einfach eine Repeat - Until Schleife wähle, die Anzeahl der Ziffern nach und nach erhöhe und solange laufen lass, bis ich alle Möglichkeiten durch hab oder halt das Ergebnis stimmt?
meist du das ginge?
alexschultze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 317



BeitragVerfasst: Fr 03.01.03 23:21 
Mal ne diesbezügliche Frage (die leider keine Antwort beeinhaltet):
man spricht ja immer von einer XXX - Bit starken Codierung. Hieße das, wenn ich bei z.B. Xor Verschlüsselung einen Key wähle, der einfach meinetwegen 1048 Bits lang ist, würde es eine 1048 Bits Verschlüsselung ergeben?