X-Or
-
Hi,
ich soll ein Programm zur Verschlüsselung von Dateien schreiben. Der Algorithmus besteht aus bitweiser Rotation und anschließender X-Or Veknüpfung.
Die Verschlüsselung klappt einwandfrei.nur bei der Entschlüsselung hört er einfach auf zu entschlüsseln. es liegt irgendwie an Xor, dass hab ich getestet. Ohne diese zusätzliche X-Or Verknüpfung klappt es einwandfrei. Ich weiß nicht warum er dann aufhört. Die ersten sachen werden sauber entschlüsselt und dann macht er schluss.
Bin Anfänger im Programmieren. Ihr könnt ja mal nen Blick drauf werfen:
void encrypt(FILE *fpi, FILE *fpo, const char passw[]) { int i=0; int rot=1; unsigned char temp; char c; unsigned char d; while ((c = fgetc(fpi)) != EOF){ if (passw[i]=='\0'){ i=0; rot=rot+1; if (rot==8) rot=1; } temp=c; c=c<<rot; temp=temp>>(8-rot); c=temp|c; c = (c ^ passw[i]); fputc (c, fpo); i++; } } void decrypt(FILE *fpi, FILE *fpo, const char passw[]) { int i=0; int rot=1; unsigned char c; char d; unsigned char temp; while ((d = fgetc(fpi)) != EOF){ if (passw[i]=='\0'){ i=0; rot=rot+1; if (rot==8) rot=1; } d = (d ^ passw[i]); c = (unsigned char)d; temp=c; c=c>>rot; temp = temp<<(8-rot); c=(temp|c); fputc (c, fpo); i++; } }
-
while ((c = fgetc(fpi)) != EOF
Da ist dein Fehler, du vergleichst ein char mit EOF. fgetc gibt ein int zurück und nicht ohne Grund, denn 257 (nicht 256) mögliche Werte können von fgetc zurück gegeben werden. Du casted int allerdings zu einem char und somit verlierst du eine Möglichkeit und somit kann es vorkommen, dass ein bestimmter Byte in der Datei gleich EOF ist und somit den loop unterbricht.
Versuch mal:
char c;
durch
int c;
zu ersetzen.
-
Vielen Dank,
das war der Fehler.
Greets