001
25.03.2007, 20:45 Uhr
0xdeadbeef
Gott (Operator)
|
Seid froh, dass es nur um Bitmaps geht, damit ist das prinzipiell denkbar einfach. Ihr agiert auf der Bitmap selbst (evtl. vorhandene Dateiheader usw. dürfen nicht verändert werden), dazu sollte es in der verwendeten Systembibliothek (In diesem Fall wohl WinAPI, oder ggf. MFC - ich erinnere mich da an eine Klasse CBitmap) Einlesefunktionen geben. Daraus solltet ihr ein char-Array bekommen (wahrscheinlich zweidimensional, aber das lässt sich ja einfach umcasten), und darin könnt ihr die Nachricht verstecken.
Den Algorithmus müsst ihr euch wohl selbst ausdenken, meine erste Idee dazu wäre halt einfach:
1. Nachricht verschlüssen 2. Länge der verschlüsselten Nachricht vorne dran schreiben 3. Die so entstandene Endnachricht bitweise in die LSBs der Bitmap schreiben.
Also grob über den Daumen:
C++: |
void stegano_encrypt(std::vector<char> &dest, std::vector<char> const &bitmap, std::string const &message) { std::string enc_message = encrypt_message(message); std::size_t bm_ix;
if(enc_message.size() * 8 > bitmap.size() - sizeof(std::size_t) * 8) { throw message; // Nachricht zu lang }
for(bm_ix = 0; bm_ix < sizeof(std::size_t) * 8; ++bm_ix) { dest.push_back((bitmap[bm_ix] & ~1) | (eng_message.size() >> bm_ix & 1)); }
for(std::string::const_iterator i = enc_message.begin(); i != enc_message.end(); ++i) { for(int j = 0; j < 8; ++j) { dest.push_back((bitmap[bm_ix] & ~1) | (*i >> j & 1)); ++bm_ix; } } }
|
...und beim entschlüsseln dann halt umgekehrt. (Code völlig ungetestet, nur zur Illustration)
Ach so, und prinzipiell ist zu Steganoghraphie auf Bitmaps zu sagen - das funktioniert nicht besonders gut, wenn die bitmap große gleichfarbige Bereiche enthält (dann sind die Fluktuationen leicht zu erkennen) -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 25.03.2007 um 20:48 Uhr von 0xdeadbeef editiert. |