Veröffentlicht 26. April 20214 j Moin leute, habe mich mal an die sicherste Verschlüsselungsmethode gewagt nur um jetzt festzustellen das ich was vergeigt habe. #include <stdio.h> #include <string.h> void caesar(unsigned char d[])//bytes ohne vor zeichen nur bis 255 { for (int i=0; d[i]; i++) { d[i] += 12;//verschlüsselungs weite if (d[i] > 'z') { d[i] += 'a' - 'z' - 1; } } } void caesarback(unsigned char d[])//bytes ohne vor zeichen nur bis 255 { for (int i=0; d[i]; i++) { d[i] += -12;//entschlüsselungs weite if (d[i] > 'z') { d[i] += 'a' - 'z' - 1; } } } char * stringToLower(char*); int main(void){ char verent=0, d[]="abcdefghijklmnopqrstuvwxyz";//alphabet //--Verschlüsselung-------------------------------- printf("wollen sie (1)ver oder (2) entschlüseln?"); do { printf("bitte geben sie 1 oder 2 ein\n"); scanf(" %c", &verent); } while (verent >'2'); if (verent == '1') { printf("Verschlüsselungs text eingabe\n"); scanf(" %s", &d); stringToLower(d); caesar(d); printf("%s\n", d); return 0; } //--Entschlüsselung-------------------------------- else { printf("Endschlüsselungs text eingabe\n"); scanf(" %s", &d); caesarback(d); printf("%s\n", d); } return 0; } //ersetzt in einem String Großbuchstaben durch Kleinbuchstaben------------------ char * stringToLower(char *d) { int i; int len = strlen(d); for(i=0; i<len; i++) { if(d[i] >= 'A' && d[i] <= 'Z') { d[i] += 32; } } return 0; } Das Programm verschlüsselt gibt allerdings beim Entschlüsseln nicht alle Zeichen korrekt aus und ich finde den Fehler nicht . Hoffe wer von euch kann mir da helfen damit in zukunft keiner mehr meine daten knacken kann 😅.
26. April 20214 j bitte gestatte mir den Hinweis dass die Schwachstelle dieser Verschlüsselung die verbleibende Häufigkeit einzelner Zeichen ist ... Ein so verschlüsselter Text ist in kurzer Zeit wieder lesbar
26. April 20214 j Autor Sag bloß 😂 ja ich soll für mein Studium solch ein Programm entwickeln bloß leider funktioniert das endschlüsseln nicht ganz richtig und finde meinen Fehler nicht.
26. April 20214 j Überprüfe doch einmal deine "Überlaufkorrektur" beim Entschlüsseln. Bei Verschlüsseln funktioniert diese korrekt, beim Entschlüsseln leider nicht.
28. April 20214 j Autor Hmmm schon geschaut aber finde da nix. stehe da grad echt auf dem schlauch 🙈 also wenn ich beim entschlüsseln anstatt -12 zu einer 14 mache kommt wieder der richtige wert raus was ja an sich auch korrekt ist aber irgendwie ein wenig geschummelt ist würde ich behaupten xD. Bearbeitet 28. April 20214 j von Pizzacorgie28
29. April 20214 j Beim Verschlüsseln erhöhst du den Wert des chars, checkst dann ob sein Wert zu hoch ist und wenn ja ziehst du die Zeichensatzlänge (26) ab um wieder im gültigen Bereich zu landen. Beim Entschlüsseln verringerst du (in deiner ersten Code-Version) den Wert des chars, checkst dann aber nicht ob der Wert zu niedrig ist, sondern (sinnloserweise) wie beim Verschlüsseln ob der Wert zu hoch ist. Aus der -12 eine +14 zu machen ist eine möglich Korrektur des Problems, dabei solltest du dir aber im Klaren sein, warum es funktioniert. (Zeichensatzlänge (26) - entschlüsselungsweite(12) = +14)
29. April 20214 j vor 12 Stunden schrieb Pizzacorgie28: also wenn ich beim entschlüsseln anstatt -12 zu einer 14 mache kommt wieder der richtige wert raus was ja an sich auch korrekt ist aber irgendwie ein wenig geschummelt ist würde ich behaupten xD. Nein, denn genau das ist der Witz: Es ist ein Ring. Wenn ich ein Zeichen um 12 Stellen verschiebe, um wie viele Stellen muss ich es weiterschieben, um wieder auf den Ursprung zu kommen?
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.