Seite 1 von 1

XOR-Operator, Bit-Manipulation von Dateien

Verfasst: Mi Mai 30, 2012 4:15 pm
von Kmitska
Hallo Leute,

ich versuche im Moment meine Daten zu verschlüsseln, indem ich die Bits mit XOR manipuliere.
So weit funktioniert es auch, aber leider nur mit Text-Dateien (*.txt).
Wenn ich z.B. ein Bild manipuliere und wieder zurücksetze bekomme ich einen Fehler von meinen Media-Player, die Datei kann nicht geöffnet werden.

Wie ich die Dateien lese und manipuliere: (fragt nicht wieso ich es Linie für Linie lese)

Code: Alles auswählen

while(!infile.eof())
        {
            getline(infile,STRING);
            for(int i=0; i<STRING.length(); i++){
                content += (char) ((int) STRING[i] ^key);
            }
            if(STRING.length() != 0){
                content += "\n";
            }
        }

Re: XOR-Operator, Bit-Manipulation von Dateien

Verfasst: Mi Mai 30, 2012 4:31 pm
von cloidnerux
Du musst deine Dateien als Binärdateien lesen und behandeln, da du mit strings IMMER ein NullByte hast, das du mit dir herumschleppst und dadurch deine Dateien zerstörtst. Wir haben dir schonmal tipps gegeben, wie man OHNE Strings Dateien öffnet.

Re: XOR-Operator, Bit-Manipulation von Dateien

Verfasst: Mi Mai 30, 2012 5:59 pm
von Kmitska
Mein Programm stürzt ab, hier ist der Code:

Code: Alles auswählen

using namespace std;
        ifstream file;
        file.open ( file_paths[i] , std::ios::in | std::ios::binary | std::ios::ate );

        if(!file.is_open()){
            m_item_list->SetItemTextColour(i, *wxGREEN);
            m_item_list->SetItem( i, 0, "ERROR");
            continue;
        }

        size_t size = file.tellg();
        std::vector<char> data(size);
        file.seekg(0, std::ios::beg);
        file.read(&data.front(), size);

        char coded[size];

        for(int n=0; n<=data.size(); n++)
        {
            coded[n] = (char) ( (int) data[n] ^key );
        }

        file.close();

        remove(file_paths[i]);
        file_paths[i] = (file_paths[i]+".ken");

        ofstream outputFile( file_paths[i] ,ofstream::binary);
        char* tmp = coded;
        outputFile.write( tmp ,size);
        outputFile.close();

Re: XOR-Operator, Bit-Manipulation von Dateien

Verfasst: Mi Mai 30, 2012 6:43 pm
von fat-lobyte
Probiers mal damit:

Code: Alles auswählen

#include <iostream>

int main()
{
    const char msg[] = "\x42\x64\x74\x6c\x76\x25\x6f\x64\x60\x29\x7a\x64\x7f\x79\x6b\x2f\x67\x74\x60\x77\x71\x35\x7f\x74\x70\x39\x6c\x7e\x6e\x6e\x6b\x7c\x48\x44\x4c\x3\x49\x40\x4f\x49\x4d\x47\xa\x48\x43\x49\x4b\xf\x43\x54\x5e\x51\x47\x41\x16\x4d\x4d\x19\x5e\x5e\x5e\x48\x59\x58\x25\x2f\x62\x36\x2a\x21\x66\x84\xf4\x2b\x2f\x39\x6c\x1d\x3c\x20\x32\x3d\x37\x3e\x31\x75\x38\x36\x3b\x31\x20\x2e\x38\x38\x30\x34\x5\xf\x4e\x43\x5\xb\x15\x13\x9\x1d\x1e\x4b\xd\x1\x2\xa\x3\x51\x13\x6\x12\x55\x17\x19\x1c\x1c\x8\x1e\x5c\x1c\x1c\x5\xf5\xf6\x41\x27\xe8\xff\xe3\xe9\xa6\xa9\xce\xea\xe8\xf8\xfc\xec\xf8\xb1\xfe\xf6\xe6\xfb\xf3\xb7\xf1\xfa\xf2\xbb\xfd\xf0\xbe\xf2\xc5\xc8\xd1\xd7\xc1\xcb\x88\xa7";

    for (unsigned i = 0; i < sizeof(msg); ++i)
        std::cout.put(msg[i] ^ i%0xFF);

    std::cout<<std::endl;
}

Re: XOR-Operator, Bit-Manipulation von Dateien

Verfasst: Mi Mai 30, 2012 6:59 pm
von Kmitska
Sowas könntest Du Dir sparen, ich arbeite seit 2-3 Tagen daran...
Habe versucht das mit dem binäres Lesen zu vermeiden, weil ich mich damit nicht auskenne.
Und jetzt weiß ich nicht, was ich da falsch mache...

Re: XOR-Operator, Bit-Manipulation von Dateien

Verfasst: Mi Mai 30, 2012 7:04 pm
von fat-lobyte
Kmitska hat geschrieben:Sowas könntest Du Dir sparen, ich arbeite seit 2-3 Tagen daran...
Und dennoch schaffst du es nicht, diesen Artikel zu lesen: http://www.proggen.org/doku.php?id=faq:frageformulieren

Wie wärs mal mit der Fehlermeldung? Ist dein Code schon das fertige Programm?


Habe versucht das mit dem binäres Lesen zu vermeiden, weil ich mich damit nicht auskenne.[/quote] Das war vielleicht der Fehler. Es unterscheided sich nicht vom lesen als Strings, nur dass du ohne Strings auskommst.

Re: XOR-Operator, Bit-Manipulation von Dateien

Verfasst: Mi Mai 30, 2012 7:17 pm
von Kmitska
Problem gelöst, danke Dir vielmals -.-
Wie wärs mal mit der Fehlermeldung? Ist dein Code schon das fertige Programm?
Fehlermeldung? Ich habe erwähnt, dass mein Programm abstürzt und nicht die IDE oder was du Dir da vorstellst.
Und dennoch schaffst du es nicht, diesen Artikel zu lesen: http://www.proggen.org/doku.php?id=faq:frageformulieren
Was willst DU bitte hier noch wissen? Was ich machen möchte ist doch offensichtlich...

Re: XOR-Operator, Bit-Manipulation von Dateien

Verfasst: Mi Mai 30, 2012 7:25 pm
von fat-lobyte
Kmitska hat geschrieben:Problem gelöst, danke Dir vielmals -.-
Immer wieder gerne.
Kmitska hat geschrieben:
Wie wärs mal mit der Fehlermeldung? Ist dein Code schon das fertige Programm?
Fehlermeldung? Ich habe erwähnt, dass mein Programm abstürzt und nicht die IDE oder was du Dir da vorstellst.
Programme stürzen an einer bestimmten Stelle ab. An welcher ist das?

Kmitska hat geschrieben:
Und dennoch schaffst du es nicht, diesen Artikel zu lesen: http://www.proggen.org/doku.php?id=faq:frageformulieren
Was willst DU bitte hier noch wissen? Was ich machen möchte ist doch offensichtlich...
Ich möchte nichts wissen, ich möchte ein Programm, dass ich copy-und-pasten kann und dann kompilieren.
Das heißt natürlich nicht, dass ich dein ganzes Programm haben will, sondern das kleinste Programm, dass deinen Fehler reproduziert. Ein Prototyp quasi.

Übrigens: der Vorgang, bei dem du dein Programm so lange verkleinerst bis nur mehr das Problem vorhanden ist, führt meistens selbst zur Lösung. Probiers mal aus.