Hallo zusammen,
habe gerade ein Programm geschrieben, welches relativ simpel Dateien ver- und entschlüsselt. Da es mit Textdateien einwandfrei funktioniert und mit Binärdateien nicht, gehe ich davon aus, dass die Codierung byteweise erfolgt - egal ob ich bei fopen(...) rb und wb oder r und b als Parameter übergebe.
Die Codierung erfolgt mittels EXOR-Verknüpfung von Quelle und Schlüssel, wie gesagt, vermutlich byteweise.
Hier der entsprechende Code (ohne Fehlerüberprüfung):
Dann wird überprüft, ob der Schlüssel mindestens so lang ist wie die Quelldatei, funktioniert bei jeder Art von Datei...
Das Problem: Übergebe ich beispielsweise eine GIF-Datei, ist die Output-Datei 11 Byte groß. Die while-Schleife stößt also zu meiner Verwunderung nach 11 Byte auf ein EOF.
Allerdings nicht, während überprüft wird, ob die Dateigrößen falsch sind. Da lasse ich einen Zähler mitlaufen und der zählt bis zur genauen Größe der Datei.
Edit: Um noch etwas Verwirrung zu stifen, zur Überprüfung der Dateigröße verwende ich folgenden Code:
Dabei zählt der Counter bei Text- und Bilddateien bis zur tatsächlichen Größe.
Damit aber wenigstens die Verschlüsselung der Textdateien klappt, muss obige Schleife benutzt werden (man beachte die zusätzlichen Klammern). Lasse ich dort die Klammern ebenfalls weg, weiß ich nicht, was das Programm genau macht. Ein Text wird verschlüsselt und wenn ich das Verschlüsselte noch einmal verschlüsseln möchte, ändert sich nichts mehr.
Beispiel:
Klartext: ABCDE
verschlüsselt: !"§$%&
nochmal verschlüsselt: !"§$%&
Mit den Klammern führt eine nochmalige Verschlüsselung wieder zum Klartext (was bei EXOR auch logisch wäre).
Wenn jemand helfen kann: DANKE!
habe gerade ein Programm geschrieben, welches relativ simpel Dateien ver- und entschlüsselt. Da es mit Textdateien einwandfrei funktioniert und mit Binärdateien nicht, gehe ich davon aus, dass die Codierung byteweise erfolgt - egal ob ich bei fopen(...) rb und wb oder r und b als Parameter übergebe.
Die Codierung erfolgt mittels EXOR-Verknüpfung von Quelle und Schlüssel, wie gesagt, vermutlich byteweise.
Hier der entsprechende Code (ohne Fehlerüberprüfung):
Code:
main() {
FILE *source, *key, *out;
char a,b;
source=fopen(argv[1],"r");
key=fopen(argv[2],"r");
out=fopen(argv[3],"w");
Code:
while((a=fgetc(source)) != EOF) {
b=fgetc(key);
fputc(a^b,out);
}
fclose...
Allerdings nicht, während überprüft wird, ob die Dateigrößen falsch sind. Da lasse ich einen Zähler mitlaufen und der zählt bis zur genauen Größe der Datei.
Edit: Um noch etwas Verwirrung zu stifen, zur Überprüfung der Dateigröße verwende ich folgenden Code:
Code:
while (a=fgetc(source) != EOF) {
i++;
}
Damit aber wenigstens die Verschlüsselung der Textdateien klappt, muss obige Schleife benutzt werden (man beachte die zusätzlichen Klammern). Lasse ich dort die Klammern ebenfalls weg, weiß ich nicht, was das Programm genau macht. Ein Text wird verschlüsselt und wenn ich das Verschlüsselte noch einmal verschlüsseln möchte, ändert sich nichts mehr.
Beispiel:
Klartext: ABCDE
verschlüsselt: !"§$%&
nochmal verschlüsselt: !"§$%&
Mit den Klammern führt eine nochmalige Verschlüsselung wieder zum Klartext (was bei EXOR auch logisch wäre).
Wenn jemand helfen kann: DANKE!
Zuletzt bearbeitet: