Problem mit Codieren [C]

Cpt_Sulo

Erfahrenes Mitglied
Hallo

Ich arbeite an einem Chiffrier- und Dechiffrierprogramm für mein Studium. Das ganze funktioniert einwandfrei, solang ich blos textdateien bearbeite, werden die nach dem Dechifff. wieder 1:1 dargestellt. Nun sollen wir das auch mit .exe und .pdf Dateien machen(letzteres habe ich noch nicht getestet). Mit .exe-Files klappt es soweit auch, nur können diese nichtmehr ausgeführt werden!

Zur Methode: es soll jedes Zeichen bzw. dessen ASCII-Code mit dem jeweiligen des Schlüssels aufaddiert werden, bzw. hinterher wieder abgezogen.

Wenn es generell möglich ist, auch die .exe-Dateien wieder ausführbar herzustellen, glaube ich liegt der Fehler in der Wiederholung des Schlüssels. Dieser steht in einem String[80]. Nur weiß ich ja nicht, wie lang der Schlüssel nun wirklich ist, daher habe ich getrickst und probiert. Ich habe festgestellt, das immer nach dem lezten Zeichen des Schlüssels ein dezimaler Zeichencode -1 folgt. Das habe ich dann dazu verwendet den Zähler wieder auf 0 zu setzten.
Da könnt ihr mir bestimmt zumindest eine elegantere Variante sagen. Wobei unser "möchtegernInformatikProf" so selbstverliebt ist, das es ganz genau der Beschreibung laufen muss. Also bitte keine vollkommen andere Methode der Codieung. Naja ich denke ihr wisst was ich meine.

Vielen Dank im Vorraus
Sulo
 
moin


Wenn du exe Dateiuen wie Textdateien öffnest geht das auch nciht, du musst sie binär öffnen und auch binär reinschreiben.


mfg
umbrasaxum
 
Das mit dem Aufaddieren MUSS Probleme geben. Bei Textdateien, die nur aus ASCII-Zeichen bestehen, funktioniert es, solange der Schlüssel auch nur aus ASCII-Zeichen besteht. Da ASCII-Zeichen nur von 0 bis 127 gehen, kann das Ergebnis nie größer als 255 sein. Bei Binärdateien haut das nicht mehr hin, da einzelne Bytes durchaus >127 sein können. Folge: Das Ergebnis der Addition kann >255 werden, es gibt einen Überlauf und der Wert kann durch Subtraktion nicht mehr wiederhergestellt werden.
Daher arbeiten alle herkömmlichen Verschlüsselungsalgorithmen mit XOR statt Addition. Einmal mit dem Schlüsselbyte exklusiv-verodert, und das Klartextbyte ist verschlüsselt. Zum Entschlüsseln wieder mit dem gleichen Schlüsselbyte exklusiv-verodern, und du hast Dein Klartextbyte wieder.
 
moin


Ja dann is das auch richtig und es liegt sehr wahrscheinlich an dem was jokey2 geschrieben hat.


mfg
umbrasaxum
 
moin


Ja dann is das auch richtig und es liegt sehr wahrscheinlich an dem was jokey2 geschrieben hat.

@jokey2
Warum können Ascii Zeichen nur bis 127 gehen? Die gehen doch bis 255, natürlich nur wenn man ein unsigned char benutzt.


mfg
umbrasaxum
 
Der Vorschlag für den Schlüssel lautet"Mutter will 1("einhalb" als Zeichen) Pfd. Butter."
In der Aufgabe steht dann noch das man den ZeichenCode des jeweiligen Zeichen mit dem des Schlüssels aufaddieren soll....usw.(vielleicht soll man ja nur merken, das des nicht geht, und sich umsonst die Nächte um die Ohren schlagen^^

Aha....sollte ich also unsigned char mal versuchen?
(mann iss hier was los.....thx)
 
Das Standard ASCII ist so festgelegt, daß die Zeichen die Werte von 0 - 127 verwenden. größer sind nur Sonderzeichen.
Auschnitt aus dem MSDN:

ASCII Character Codes

The ASCII character code tables contain the decimal and hexadecimal values of the extended ASCII (American Standards Committee for Information Interchange) character set. The extended character set includes the ASCII character set and 128 other characters for graphics and line drawing, often called the “IBM® character set.”
 
Ich hab mal was ähnliches gemacht. Bei mir war genau der ASCII code das Problem
da es zum Beipiel 007 im ascicoode gibt, das aber nur einen Pipston erzeugt lässt sich dieses zeichen nicht abspeichern, deswegen würde ich auch raten das binär zu machen oder den asciicode als zahl abspeichern und verändern
 
moin


@jokey2
Ja so meinte ich das auch, trotzdem sind es ja noch Ascii Zeichen, hörte sich von weiter oben nur anders an...

Wie dem auch sei sollte es mit nem unsigned char doch trotzdem gehen?!
Denn selbst mit dem 'z' = 122 kann man dann immernoch addieren.


mfg
umbrasaxum
 

Neue Beiträge

Zurück