EyLex Geschrieben 13. Juli 2010 Teilen Geschrieben 13. Juli 2010 Nabend liebe Commnunity, ich hab da mal ein paar Fragen. Ich wollte ein Programm schreiben, was nach dem Caeser Verfahren Texte verschlüsselt. Jetzt habe ich aber ein paar Probleme, und zwar, wenn ich a) möchte ich, dass nach z wieder bei a angefangen wird das mit nicht nur mit einem Buchstaben verschlüsseln kann, sondern auch mit Worten. Bis jetzt habe ich es auf verschiedene Wege probiert, zB eine if-Bedingung, falls der ASCII Wert größer als 128 wieder auf 65 zurückrechnen usw... Ich komme aber irgendwie kein bisschen vorran, er gibt immer nur komische Sonderzeichen aus. Liegt es vielleicht an meinem Variablentypen, da ich nur char verwende? Über eine konstruktive Antwort würde ich mich sehr freuen. Liebe Grüße Alex Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
unbenannt Geschrieben 14. Juli 2010 Teilen Geschrieben 14. Juli 2010 Relevanter Code könnte hilfreich sein Ich zumindest könnte nur raten, was aber wahrscheinlich wenig konstruktiv wäre. falls der ASCII Wert größer als 128 wieder auf 65 zurückrechnen usw... Großbuchtaben besitzen ASCII-Werte von 65 bis 90, Kleinbuchstaben 97 bis 122. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 14. Juli 2010 Teilen Geschrieben 14. Juli 2010 AFAIK hast Du beim Caesar-Algo ein Schlüsselalphabet, welches um einen festen Wert gegenüber dem Klartextalphabet verschoben worden ist: ABCDEFGHIJKLMNOPQRSTUVWXYZ (Klartext) FGHIJKLMNOPQRSTUVWXYZABCDE (Schlüssel) Insofern, wäre es imho am einfachsten, ein Array mit dem Schlüssel anzulegen, und je nach ASCII-Wert des Eingabezeichens, den Versatz gegenüber dem 0-Wert zu ermitteln und den entsprechenden Char im Schlüssel-Array zu nehmen. Hier ein Beispiel für Uppercase: #include "stdio.h" #include "conio.h" int main(int argc, char **argv) { int i=0; char *Plain="FACHINFORMATIKER"; char *Key="FGHIJKLMNOPQRSTUVWXYZABCDE"; char Encrypted[256]; /* Cave! Encrypted muss natürlich so groß sein, dass auch der gesamte Klartext reinpasst */ for (i=0; Plain[i]!='\0'; i++) { Encrypted[i]=Key[Plain[i]-'A']; } Encrypted[i]='\0'; printf("%s", Encrypted); getch(); return 0; } Erklärung: Encrypted[i]=Key[Plain[i]-'A']; Plain ergibt den ASCII-Wert des iten Zeichens des Plaintextes. 'A' ergibt den ASCII-Wert vom großen "A", also 65. Folglich ergibt Plain-'A' einen Wert zwischen 0 und 25. Key[WERT]; mit 0<=Wert<=25 ergibt dann das Element an der Stelle Wert im Feld Key. So hast Du ein Mapping von Plain nach Encrypted, was der einfachen Caesar-Chiffre entspricht. Das ist doch schonmal eine prima Grundlage, von der ausgehend Du weitermachen kannst Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.