Gepostet: |
Verschlüsselungstechnik | ||||||||||
hi , ich brauche mal wieder dringend Hilfe in Haskell. also ich komme bei drei funktionen nicht weiter. dabei gehts um polyalphabetische verschlüsselung. 1. mC::String -> [Char] liefert den oder die häufigsten buchstaben eines textes; ein beipsiel: mC "HALLO" -> ['L'] 2. abs:: String -> Strinf -> [Int] ein txt wird nach mustern untersucht, liefert halt eine liste der gefunden wortabständen ich weiß gar nicht, was ich da machen soll 3. depoly:: String -> String -> String na halt die entschlüsselung des polyalph., text zu einem passwort. ach noch eine frage, wenn ich diese fkt. habe, kann ich damit ein one-time-pad-verschlüsseln? ich bedanke, mich sehr, wenn jemand mir weiter hilft. |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hallo Icegirl, willst du es nicht erstmal ein wenig selbst versuchen und ich helfe dir dann bei den fehlern? hier ein paar tipps. 1) du kannst den String in chars zerlegen. danach fast du die jeweils gleichen buchstaben zu einer kleinen liste zusammen um gibst zum schluß den ersten Buchstaben der längsten Liste zurück, .. das verfahren was du entschlüßeln sollst, heißt vignere verfahren. du findest darüber etwas bei wikipedia. http://de.wikipedia.org/wiki/Polyalphabetische_Substitution bei 2) mußt du die autokorrelation bestimmen. ihr hattet die formel dafür bestimmt in der vorlesung/unterricht. Einen Vigenère-Code bricht man auf folgende Weise: Als erstes bestimmt man die Länge l des Schlüsselworts. Danach sind für ein festes c mit 0 < c < l die Zeichen c + k · l, k = 0, 1, . . . jeweils mit dem gleichen Cäsar-Code verschlüsselt. Um die Schlüssellänge zu bestimmen, nutzt man aus, dass zwei mit dem gleichen Cäsar-Code verschlüsselte Texte einander ähnlicher sind, als zwei mit unterschiedlichen Ceasar-Codes verschlüsselte. Ein Maÿ für die Ähnlichkeit zweier Texte bietet die Korrelationsfunktion D. Sie kann folgendermaßen definiert werden: Bild: --> http://www.stud.uni-karlsruhe.de/~upaun/info2/bild01.jpg Dabei sollen s, t zwei Texte über dem gleichen Alphabet sein. Der Ausdruck s(i) soll das i-te Zeichen des Textes s bezeichnen, und ls bzw. lt sind die Längen der Texte s und t. Für die Bestimmung der Schlüssellänge berechnet man die Autokorrelation. Hierbei berechnet man alle zyklischen Verschiebungen eines Textes und vergleicht sie mittels der Korrelation mit dem Ursprungstext. Im Fall eines mit Vigenère verschlüsselten Textes kann man in der resultierenden Sequenz periodische Spitzen erkennen, wobei die Periode entweder die Schlüssellänge oder ein Vielfaches davon ist. dein ziel ist es, diese liste von ints zurück zu geben. gruß jacke |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
hi, danke für deine hilfe :) ich würde ja nicht fragen, wenn ich es nicht wüsste. aber so schlauer werd ich auch nicht. also zu 1) mC:: String -> [Char] mC "" = [] mC (x:xs) = mC' x ++ mC xs und weiter komm ich nicht mitm zusammenfassen, ganz zu schweigen zu den nächsten funktionen. ich hab mir paar thread hier vorher gesehen. aber ehrlich geasgt verstehe ich das immer noch nicht, warum man das so kompliziert macht. kann man es nicht leichter machen? sorry, bin grad verzweifelt, sonst würd ich mich ja nicht an das forum wenden |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
ich brauchte deine funktion mC garnicht. ein String ist doch schon eine Liste von chars. hab die aufgabe jetzt doch etwas ander gelöst als zuerst vorgeschlagen indem ich einfach die häufigkeit von jedem Buchstaben gezählt habe und dann den größten mir immer merke. aufrufen kann man found so: found "Hallo"
ich denke mal das du bei 2) die Muster findest in dem du found auf dem text anwendest. irgendwie bauen diese aufgaben doch alle aufeinader auf ist doch immer so. aber es muß was mit der autokorreltion zu tun haben da bin ich mir sicher da muß ich erstmal drüber schlafen gruß jacke |
|||||||||||
Zum Seitenanfang | |||||||||||