Daffi Geschrieben 23. Dezember 2008 Geschrieben 23. Dezember 2008 Hey ich bins schon wieder. Folgendes Problem: Uns hat ein prof ne Reihe von Code hingehauen die ich absolut nicht verstehe. Es handelt sich um eine Verschlüsselungs- Methode eines Pw´s. Mein Problem: 1) Code ist nicht ausführbar .... 2) Ich verstehe ihn nicht einmal Hier der Code: #include <stdio.h> #include <conio.h> char *codec(char *text,char codewort) { char *wort = (char*)malloc (20*sizeof(char)); char *textzeiger= text; char *wortanfang=wort; int i=0; while('\0'!=*textzeiger) { *wort++=(*(codewort+(i% strlen(codewort)))-65); i++; } *wort='\0'; return wortanfang; } Kann mir jemand da vllt behilflich sein? bzw mal Kommentare schreiben? Danke und euch ein Frohes Fest! Daffi Zitieren
dahoffmann Geschrieben 24. Dezember 2008 Geschrieben 24. Dezember 2008 Hoi! Hoffe Dir hilft der folgende Code #include <stdio.h> // printf(3) #include <stdlib.h> // malloc(3) #include <string.h> // strlen(3) char *codec(char *text, char *codewort) // 'codwort' solle doch ein Pointer sein? { // Was passiert wenn 'text' groesser als 20 ist? char *wort = (char*)malloc(20 * sizeof(char)); // Wenn `malloc` keinen Speicher bekommt, NULL Pointer zurueck geben! if (wort == NULL) return NULL; char *textzeiger = text; char *wortanfang = wort; int i = 0; /* * Original Zeile: * while ('\0' != *textzeiger) * Da wird immer nur das erste Feld von 'textzeiger' getestet, * also muss nach dem Testen erhöht werden. Und das ganze in Klammern, * weil der `*` Operator eine hoehere Prioritaet als `++` hat */ while (*(textzeiger++) != '\0') { *wort++ = (*(codewort+(i % strlen(codewort))) - 65); /* * *wort++ * Wir wollen auf den _Inhalt_ von 'wort', danach gehen wir * ein Feld weiter (Fuer die naechste Runde der Schleife) * * (codewort+(i % strlen(codewort))) * Wir rechen mit dem Modulo Operator aus auf welches * (Speicher)Feld wir von 'codewort' zugreifen wollen. * Durch das * 'i' modulo strlen(codewort) * bekommen wir einen Wert der NICHT groeszer als * die Laenge von 'codewort' sein wird :-) * * (*(...) - 65) * Wir ziehen vom _Inhalt_ des 'codewort' von der oben errechneten * Position 65 ab. * Wenn *(...) uns ein 'c' zurueck gibt wird es zu '#' * c = Dezimal 100 * 100 - 65 = 35 * Dezimal 35 = # * * Und das ganze wird dann in 'wort' gespeichert */ i++; } // An der letzten Postion von 'wort' das NULL Byte setzen *wort = '\0'; return wortanfang; } [/PHP] Nur den Sinn kann ich nicht ganz erkennen. Weil mit der Variable [i]text[/i] wird eigentlich nicht gearbeitet, also nichts [i]"verschlüsselt"[/i] Gruß, Daniel Zitieren
Daffi Geschrieben 24. Dezember 2008 Autor Geschrieben 24. Dezember 2008 Ich glaube die Variable text soll das zu verschlüsselnde Wort sein wenn ich das richtig verstanden habe. Sinn ist ja eigentlich mit dem Codewort und dem zu verschlüsselnden Wort welches der Funktion übergeben werden ein Code zu basteln. Gearbeitet wird nichts das Passwort soll anscheinend unangetastet bleiben. Deswegen der *Textzeiger.Weiterhin nehme ich einfach mal an das das Passwort auf 20 Zeichen begrenzt ist. Das ist ja das Problem.Was will der Prof uns damit sagen???? Diese Verschlüsselung soll im Beleg vorkommen wobei ich immer noch nicht weis wie sie funktioniert. Zitieren
AndiE Geschrieben 24. Dezember 2008 Geschrieben 24. Dezember 2008 Hi, du sprachst von einer Menge Code's. Können die oder der Vorlesungs/Seminar-Inhalt helfen? Auf den ersten Blick sah das nach dem Buchstabenersetzungsverfahren aus. Zitieren
Daffi Geschrieben 24. Dezember 2008 Autor Geschrieben 24. Dezember 2008 Leider nicht.Es war nur Inhalt einer Übung. Wie gesagt es soll ein Wort mit einem Codewort ersetzt werden welches frei wählbar ist. Das Prinzip verstehe ich lediglich nicht. Zitieren
AndiE Geschrieben 24. Dezember 2008 Geschrieben 24. Dezember 2008 Ok, es gebe ein Verfahren, was der Sache nahe käme: 1. Gegeben sei ein "Codewort", das möglichst lang ist und aus Großbuchstaben besteht. 2. gegeben sei ein "Text", der ebenfalls aus Großbuchstaben besteht 3. Kodierung/Chiffrierung erfolgt nach der Formel: (Buchstabe vom Codewort + Buchstabe vom Text - 0x82) %26+0x41 0x41=65, weil "A" diesen Kennwert in der Zeichentabelle hat, 0x82 ist das Doppelte. 26, weil es 26 Buchstaben gibt. Das ist ein uraltes Verschlüsselungsverfahren, aber nicht für Passwörter , sondern für Nachrichten. Ich fand es bei einer Anleitung für LARP. Vielleicht solltest du das mal ausprogramieren, und mit deinem Codebeisiel vergleichen. MfG Andre' Zitieren
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.