Binärdatei in Python lesen und schreiben

8

Der folgende Code scheint Binärformat nicht richtig zu lesen / schreiben. Es sollte eine Binärdatei lesen, bitweise XOR die Daten und es zurück in die Datei schreiben. Es gibt keine Syntaxfehler, aber die Daten werden nicht überprüft und ich habe die Quelldaten über ein anderes Tool getestet, um den XOR-Schlüssel zu bestätigen.

Aktualisieren : pro Feedback in den Kommentaren liegt das wahrscheinlich an der Endianz des Systems, auf dem ich getestet habe.

xortools.py :

%Vor%

Rufen Sie xortools.py an:

%Vor%

Es scheint, dass ich Bytes pro Antwort lesen muss. Wie würde die obige Funktion in das Folgende integriert, da die obige Funktion mehrere Bytes manipuliert? Oder spielt es keine Rolle? Muss ich struct verwenden?

%Vor%

Für ein Beispiel hat die folgende Datei 4 sich wiederholende Bytes, 01020304:

Die Daten werden mit einem Schlüssel von 01020304, der die ursprünglichen Bytes zerlegt, XOR-verknüpft:

Hier ist ein Versuch mit der ursprünglichen Funktion, in diesem Fall ist 05010501 das Ergebnis, das falsch ist:

    
Astron 13.07.2012, 00:10
quelle

2 Antworten

2

Probieren Sie diese Funktion aus:

%Vor%

Ich bin mir nicht sicher, ob Sie tatsächlich die Eingabe mit 4 Bytes durchführen, aber ich habe nicht versucht, sie zu entschlüsseln. Dies setzt voraus, dass Ihre Eingabe durch 4 teilbar ist.

Bearbeiten, neue Funktion basiert auf neuer Eingabe:

%Vor%

Dies könnte wahrscheinlich verbessert werden, aber es liefert die richtige Ausgabe.

    
Keith 13.07.2012, 01:20
quelle
1

Hier ist eine relativ einfache Lösung (getestet):

%Vor%

Was es tut, ist die Länge der Daten bis zu einem ganzzahligen Vielfachen von 4 Bytes aufzufüllen, xor ist das mit dem Vier-Byte-Schlüssel, aber schreibt dann nur Daten aus, die die Länge des Originals hatten.

Dieses Problem war ein wenig schwierig, weil die Byte-Reihenfolge der Daten für einen 4-Byte-Schlüssel von Ihrem Prozessor abhängt, aber immer zuerst mit dem High-Byte geschrieben wird, aber die Byte-Reihenfolge von String oder Bytearrays immer niedrig geschrieben wird -Byte zuerst wie in deinen Hex-Dumps gezeigt. Damit der Schlüssel als hexadezimale Ganzzahl angegeben werden kann, war es notwendig, Code hinzuzufügen, um die abweichenden Darstellungen bedingt zu kompensieren - dh die Bytes des Schlüssels können in der gleichen Reihenfolge wie die in den hexadezimalen Dumps erscheinenden Bytes angegeben werden / p>     

martineau 13.07.2012 01:18
quelle

Tags und Links