Gepostet: |
Vigenère Verschlüsseln | ||||||||||
a) Schreiben Sie eine Funktion getLetters :: String -> String, die aus einem String alle Zeichen entfernt, die keine Buchstaben sind, und die verbleibenden Zeichen in Großschreibung umwandelt. b) Im Mittelalter wurde zur Verschlüsselung das Vigenère-Verfahren verwendet. Es wurde veröentlicht im Jahr 1586 von Blaise de Vigenère und galt lange Zeit als sicher. Hier wird Schlüsselwort gewählt (z. B. SCHLUESSEL)und zyklisch wiederholt über den Text geschrieben. Jedes Zeichen des Schlüsseln bestimmt nun, mit welchem Cäsar- Code das darunterstehende Zeichen des Textes verschlüsselt wird. S C H L U E S S E L S C B E I S P I E L T E X T T G P D J M W D X P P V Implementieren Sie eine Funktion vigenere :: String -> String -> String, die einen Text auf diese Weise verschlüsselt. Gehen Sie dabei davon aus, daß auf den Text zuvor die Funktion getLetters angewendet wurde. Wie mache ich die Aufgabe am besten?? Die a hab ich schon:
aber bei der zweiten komme ich nicht weiter, kann mir jemand helfen? |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
import Char -- für Zeichenumwandlung "toUpper" ist relativ umständlich...das (minus 65)*2 und dann modulo 25 muß man machen weil 'A' in Enum 65 ergibt und 'Z' 90 damit man immer von vorne die Buchtstaben hat also Z+A=Z die zweite funktion brauchte ich weil ich den key nochmal extra mitführen mußte gruß jacke |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Wieso modulo 25? Das Alphabet hat doch 26 Buchstaben. | |||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
A fängt doch bei null an...macht dann 26 zähl mal von 65 bis 90 hoch...ist genau 26 |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Eben, 26. toEnum (((fromEnum 'A') + (fromEnum 'Z') - 130)`mod`25 + 65) :: Char = toEnum ((65+90-130)`mod`25 + 65) :: Char = toEnum (25`mod`25 + 65) ::Char = toEnum (0 + 65) :: Char = 'A' Wenn 'A' der 0 entspricht müßte aber 'Z' rauskommen. |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
import Char -- für Zeichenumwandlung "toUpper" gut hast mich überzeugt :-) |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
ich danke euch Implementieren Sie eine Funktion vigenere :: String -> String -> String, die einen Text auf diese Weise verschlüsselt. Wie bekomme ich jetzt die Funktion mit eingebaut das er die überprüfung mit getLetters macht? hab schon ein paar möglichkeiten ausprobiert, kommt aber nicht das raus was rauskommen sollte |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
so :-) für den key würdest dus genauso machen ...einfach die klammern rum und getLetters davor |
|||||||||||
Zum Seitenanfang | |||||||||||