www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

Icegirl

Gepostet:
10.11.2006 22:08

Verschlüsselungstechnik  
hi Smilie ,

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    
 
Jacke

Gepostet:
10.11.2006 23:09

   
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    
 
Icegirl

Gepostet:
11.11.2006 13:00

   
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 Smilie
Zum Seitenanfang    
 
Jacke

Gepostet:
11.11.2006 20:59

   
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"

--die eigentliche funktion sie ruft haeuf mit den gesamten string auf dem ersten Buchstaben und nochmal dem gesamten string
found (x:xs)= haeuf (x:xs) x (x:xs)

--sucht den am häufigsten vorkommenden Buchstaben. dabei wird jeder Buchstabe durchprobiert
haeuf [] b liste = b
haeuf (x:xs) b liste
|(count liste b 0)>(count liste x 0)=haeuf xs b liste
|otherwise =haeuf xs x liste

--zählt wie oft ein Buchstabe in einer liste vorkommt
count [] buchstabe counter = counter
count (x:xs) buchstabe counter
|(x==buchstabe) = count xs buchstabe (counter+1)
| otherwise = count xs buchstabe (counter)


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 schlafenSmilie

gruß jacke
Zum Seitenanfang