Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PC-Wortschatz (https://www.delphipraxis.net/144204-pc-wortschatz.html)

Reap3r 2. Dez 2009 12:47


PC-Wortschatz
 
Hi Leute!

Zurzeit machen wir in Infromatik in der Schule Kryptographie(Verschlüsslungen).
Nun findet eine Projektarbeit statt, in der wir in gruppen Programme zum Thema schreiben sollen.
Auf der Suche nach Ideen ist mir etwas isn den Sinn gekommen.
Ein Pragramm, dass verschlüsselte Texte knack!
Hierbei soll es zunächst um einfache Verschlüsselungen gehen.
Dies verläuft nach der Cäsar-Verschlüsslung, indem jeder buchstabe des textes um eine bestimmte Stelle im
Alphabet verschoben wird!

Beispiel:
Wenn der orginaltext "abc" heißt und dieser mit dem schlüssel "b" verschlüsselt wird,
dann heißt er danach "bcd", also um eine stelle im alphabet verschoben.

Das Programm zum knacken eines solchen verschlüsselten Textes soll nun testen, ob
wenn man den verschlüsselten Text verschiebt, irgendwann ein sinnvoller Text herauskommt.
D.h. es verschiebtn den Text immer um eine Stelle im alphabet weiter, biss ein sinnvoller text rauskommt.

Gibt es eine Funktion mit der ich das Programm prüfen lassen kann, ob der Text sinnvoll ist,
bzw. das prüft, ob die vorhandenen wörter des Textes ine einem Wortschatz vorhanden sind, den der PC besitzt?

jfheins 2. Dez 2009 12:50

Re: PC-Wortschatz
 
Es gibt Wördterbücher, aber die sind zum Brechen der Caesar-Chiffre unnötiger Aufwand - die Buchstabenhäufigkeit sollte locker ausreichen ;)

Neutral General 2. Dez 2009 12:52

Re: PC-Wortschatz
 
Hi,

Also du entschlüsselst den Text und speicherst dann jedes Wort z.B. in einer Stringlist. Dann brauchst du halt ein Wörterbuch. Am besten ein großes. Dann guckst du für jedes Wort aus dem (evtl) entschlüsselten Text ob es dazu einen Eintrag im Wörterbuch gibt. Du zählst mit wie viele Wörter gefunden wurden und hast dann am Ende z.B. das Ergebnis dass 15% aller entschlüsselten Wörter im Wörterbuch zu finden waren. Die Entschlüsselung scheint also schief gegangen zu sein. Oder dein Wörterbuch war zu klein :mrgreen:
Ab welchem Prozentsatz der Text als "entschlüsselt" gilt musst du dann halt festlegen.

Nersgatt 2. Dez 2009 13:00

Re: PC-Wortschatz
 
Wenn man die Sprache des Textes kennt, könnte man den Text auf charakteristische Buchstabenfolgen untersuchen. Im Deutschen z.B. nach "sch", "ch", "st", "mm", "en", usw.
Daraus kann man dann Warscheinlichkeiten ableiten, dass der entschlüsselte Text richtig ist.

Edit: Genauso kann man natürlich auch auf Zeichenfolgen untersuchen, die eher unwarscheinlich sind, dass sie vorkommen. Z.B. "mf" ist im deutschen sehr selten. Ok, die Franken sagen "Semf", aber das zählt nicht. :stupid:

himitsu 2. Dez 2009 13:03

Re: PC-Wortschatz
 
ist eventuell interessant zum Lesen
http://www.w3l.de/w3lmedia/W3L/Mediu...3937137896.pdf

Reap3r 2. Dez 2009 15:27

Re: PC-Wortschatz
 
hmm wie soll das mit dem wörterbuch aussehen?

Gibt es eins, das jeder Windows PC hat oder muss ich da extra eins besorgen?

wie binde ich das in delphi ein?

himitsu 2. Dez 2009 15:35

Re: PC-Wortschatz
 
Windows hat kein Wörterbuch ... wozu auch und welche Wörter sollten dann da drinnen sein, damit es für alle Windowsnutzer "nützlich" wäre?

[dp]Wörterbuch[/dp]

p80286 2. Dez 2009 15:44

Re: PC-Wortschatz
 
Ich würd es mir ganz einfach machen:
Text entschlüsseln
Word fragen wieviele Fehler darin sind.
fertig

Gruß
K-H

Reap3r 2. Dez 2009 19:37

Re: PC-Wortschatz
 
???
kann man ein selbstgeschriebenes Programm word nach was fragen lassen?
versteh ich net!

Nersgatt 3. Dez 2009 06:50

Re: PC-Wortschatz
 
Such mal in der DP nach Hier im Forum suchenWord fernsteuern.
Da landet man z.B. hier: http://www.delphipraxis.net/internal...rd+fernsteuern

Eine weitere Idee wäre, jedes entschlüsselte Wort mit Indy in Google suchen zu lassen. Google zeigt dann oben recht die Anzahl der Fundstellen an. Diese zusammenzählen. Je höher die Zahl, desto warscheinlicher ist die Richtigkeit des Textes.

jfheins 3. Dez 2009 16:38

Re: PC-Wortschatz
 
Das wird ja langsam schlimm hier ... erinnert mich daran: http://thedailywtf.com/Articles/Clas...rs-Gloves.aspx :mrgreen:

Also falls du wirklich so eine Wörterbuchdatei haben möchtest, guck mal nach DAWG ( http://www.delphipraxis.net/internal...032238#1032238 ) das sollte damit zügig umgehen können - die eigentlichen Wörter kannst du dann irgendwoher bekommen. (einfach mal nach wörterbuch suchen)

Aber ich sag's auch gerne nochmal - ein Wörterbuchg (geschweige denn Word Rechtschreibprüfung fernsteuern) ist hier gar nicht nötig da bei Caesar eine Häufigkeitsanalyse reichen sollte.

p80286 3. Dez 2009 17:15

Re: PC-Wortschatz
 
Da muß ich mich entschuldigen:
Ich meinte den Text entschlüsseln lassen, und den entschlüsselten Text dann per Copy und Paste nach Word bringen und dann prüfen lassen.

Die Word-Fernsteuerung ist da wohl ein wenig zu aufwendig.

Die Möglichkeit google zu nutzen, halte ich für nicht so praktikabel, wenn ich überlege wie oft ich auch zu haarsträubenden Schreibfehlern noch Einträge finde.

Falls Du Informationen zur statistischen Analyse brauchst: Wikipedia:Buchstabenhäufigkeit

Das läßt sich wirklich ruck zuck umsetzten.

Gruß
K-H

Reap3r 3. Dez 2009 17:31

Re: PC-Wortschatz
 
hmm wenn ich das nach Häufgkeit der Buchstaben mache,
wie programmiere ich sowas?

himitsu 3. Dez 2009 17:38

Re: PC-Wortschatz
 
Du zählst die Buchstaben und vergleichst die Werte mit einer entsprechenden Häufigkeitstabelle ... dann probierst du jeweils alle 26 Möglichkeiten der Entschlüssellung durch und da wo die Werte am meißten übereinstimmen, das ist am Wahrscheinlichsten die richtige Lösung.

Sollte aber, in dem von mir verlinkten PDF, auch so erwähnt worden sein.

Reap3r 3. Dez 2009 17:39

Re: PC-Wortschatz
 
hmm und wie lasse ich ihn das vergleichen?

Reap3r 3. Dez 2009 17:47

Re: PC-Wortschatz
 
Sry aber hab keine Ahnung wie ich ihm die Tabelle einverleiben soll, und wie man das mit Prozenten macht...:(

patti 3. Dez 2009 18:33

Re: PC-Wortschatz
 
Zu beachten ist, dass diese Methode nur bei (relativ) langen Texten ein zuverlässiges Ergebnis liefert. Wenn du nur einen kurzen Satz oder einpaar Wörter hast, ist es fast schon Zufall, wenn das richtige Ergebnis rauskommt.

Patti

Edit: In einem Buch über verschiedene Verschlüsselungsmethoden wird als Beispiel das Wort "Staubsauger" genannt. Es enthält z.B. nur ein "e", dafür aber überdurchschnittlich viele "a" und "s". Eine "Entschlüsselung" nach der oben genannten Methode führt also zu irgendeinem Unsinn. Das Buch sagt aber auch, dass bei genügend großem Textmaterial die Häufigkeit der Buchstaben ziemlich genau der Statistik entspricht (irgendwo auch logisch). Wenn du also einen ganzen Text entschlüsseln willst, dann sollte die Methode klappen. Bei nur wenigen Zeichen versagt sie aber wahrscheinlich auf ganzer Linie.

himitsu 3. Dez 2009 18:37

Re: PC-Wortschatz
 
angeblich sollen schon 80 Zeichen dafür ausreichen.

bei nur wenigen Wörtern kann es auch sein, daß gerade diese Wörter nicht im Wörterbuch drinsteht, sie die Word-Rechtschreibprüfung nicht kennt oder Google nur wenige Suchergebnis, bzw. bei mehrere kurzen Wörtern (verschiedener Entschlüsselungsversuche) verhältnismäßig zuviele Suchergebnisse liefert, so daß da auch keine Automatik möglich ist.

patti 3. Dez 2009 18:49

Re: PC-Wortschatz
 
@himitsu: Siehe oben: Es kommt halt darauf an, wie viel Text er hat...

@Topic: Am besten zählst du erstmal die absolute Häufigkeit der verschiedenen Buchstaben. Mache dir ein Array of integer mit 26 (wenn du Umlaute mitzählen willst dann eben 29, mit scharfem "s" 30) Feldern. Diese Felder müssen am Anfang natürlich 0 sein. Dann gehst du Zeichen für Zeichen deines Textes durch und erhöhst jeweils den entsprechenden Wert. Also ungefähr so:

Delphi-Quellcode:
var Buchstaben : array[0..25] of integer;
var i : integer;
var c : Char;
begin
   //--
   if Memo1.Text <> '' then
   begin
      for i := Low(Buchstaben) to High(Buchstaben) do Buchstaben[i] := 0;
      //
      for i := 1 to Length(Memo1.Text) do
      begin
         c := AnsiUpperCase(Memo1.Text[i])[1];
         //
         case c of
         'A' : inc(Buchstaben[0]);
         'B' : inc(Buchstaben[1]);
         // und so weiter
         end;
      end;
   end;
end;
In dem Buchstaben-Array hast du dann jeweils die absolute Häufigkeit der Buchstaben. Mit der kannst du dann im nächsten Schritt weiterarbeiten. Noch eine kleine Anmerkung: den Case-Teil kannst du auch etwas vereinfachen, z.b. so:

Delphi-Quellcode:
if c in ['A'..'Z'] then inc(Buchstaben[Ord(c)-Ord('A')]);
So kannst du dir die case-Abfrage sparen, ist aber wahrscheinlich etwas schwieriger zu verstehen.

MFG
Patti

Reap3r 3. Dez 2009 19:05

Re: PC-Wortschatz
 
cool danke!
das mit dem umwandeln in den ascicode hätte ich auch gemacht.
Mit dem Rest muss ich mich nochmal beschäftigen...^^

Reap3r 3. Dez 2009 19:12

Re: PC-Wortschatz
 
hmm aber wie gebe ich den entschlüsselten text wieder aus?

patti 5. Dez 2009 13:12

Re: PC-Wortschatz
 
Wie weit bist du denn bis jetzt? Hast du schon eine Möglichkeit gefunden, zu bestimmen, um wie viel die Buchstaben im Alphabet verschoben wurden?

Reap3r 6. Dez 2009 16:23

Re: PC-Wortschatz
 
ne sry!

hab ziemlich viel zu lernen zur zeit...
...hatte nicht so die zeit mich damit zu beschäftigen°!


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 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