Stegano
-
Das gefällt mir schoneimal.
Noch eine gegenfrage: wie kann ich es wieder entschlüsseln?
Und wo kann ich mir brauchbare Infos über die binären(?) Operatoren beschaffen?
-
Bzw, wie müsste ich Änderungen vornehmen, wenn ich ein byte auf 2, 4 oder x Pixel verteile?
mfg
-
Ich hatte mir folgendes vorgestellt:
ich setzte das letzte bit jedes bytes auf 0 und überschreibe es dann mit dem jeweiligen bit von meinem char-Wert.
--> Also bekomme ich ein byte in 8 Bit unter und zwar: RGB RGB RG--> wie realisiert man das?
-
unsigned char pixel[9]; //jeweils drei Pixel unsigned char zeichen; //unser zu versteckendes Zeichen for (int i=0;i<8;i++) { pixel[i]=(pixel[i]&(~1))|((zeichen&(1<<i))>>i); /* ~ kehrt alle Bits in der binären Darstellung um: 1 (00000001) wird also zu (11111110). & liefert im Ergebnis für jedes Bit, das in beiden Operanden gesetzt war, eine 1 Beispiel: 55 (00110111) & 11111110 ergibt 00110110 Dies erreicht also, dass das letzte Bit immer auf 0 gesetzt wird. << schiebt die ganze Bitfolge nach links, >> nach rechts Beispiel: i=5, zeichen=97 (01100001) 1 (00000001) << 5 ist 00100000; 01100001&00100000 ist 00100000 00100000 >> 5 ist wieder 1. Das ganze liefert also das Bit an (i+1)-letzter Stelle & liefert im Ergebnis für jedes Bit, das in einem oder beiden der Operanden gesetzt war, eine 1 00110110 | 00000001 liefert dann 00110111 als Endergebnis.*/ }
-
Lies dir erstmal die Grundlagen zu den Bit-Operatoren durch:
http://de.wikipedia.org/wiki/Bitweiser_Operator
Und dann kannst du nochmal konkret Fragen zu der Steganographie stellen.
-
Nanyuki schrieb:
Von Steganographie kann man dann aber nicht mehr sprechen, wenn ein ganzer Farbkanal für das "Verstecken" eines Zeichens verwendet wird.
Man sollte lieber die zwei oder drei niederwertigsten Bits jedes Farbkanals für das Verstecken verwenden.Natürlich kann man das. Es ist doch nirgends verbindlich definiert, wie viele Bits für ein Zeichen zu reservieren sind. Das kann man sich selbst aussuchen.
zerofox schrieb:
Ich hatte mir folgendes vorgestellt:
ich setzte das letzte bit jedes bytes auf 0 und überschreibe es dann mit dem jeweiligen bit von meinem char-Wert.
--> Also bekomme ich ein byte in 8 Bit unter und zwar: RGB RGB RG--> wie realisiert man das?
mach dir doch erstmal klar, wie eine 8-bit zahl binär aussieht.
unsigned char ein_byte = 255; // 1111 1111 unsigned char bitmaske = 127; // 0111 1111 unsigned char eins_setzen = 128; // 1000 0000 unsigned char neues_byte = 0; // letztes bit 0 setzen neues_byte = ein_byte & bitmaske; // ergebnis: 1111 1111 // letztes bit 1 setzen neues_byte = neues_byte | eins_setzen; // ergebnis: 0111 1111
http://de.wikipedia.org/wiki/Bitweiser_Operator
http://de.wikipedia.org/wiki/Bitweise_Verschiebung
http://www2.informatik.uni-halle.de/lehre/c/c_operbm.html
MfG d.k
-
Ok, vielen Dank, dass hat mir sehr weiter geholfen!
mfg zerofx
-
dEr kRyPtOgRaFiKeR schrieb:
Natürlich kann man das. Es ist doch nirgends verbindlich definiert, wie viele Bits für ein Zeichen zu reservieren sind. Das kann man sich selbst aussuchen.
Das ist zwar nicht definiert, aber Steganographie ist ja die Kunst, geheime Nachrichten in einem Medium unauffällig zu verstecken.
Wenn man von irgendeinem Foto ausgeht und dann einen ganzen Farbkanal mit beliebigen Werten überschreibt, wird das einem Betrachter durchaus auffallen.
-
Nanyuki schrieb:
Das ist zwar nicht definiert, aber Steganographie ist ja die Kunst, geheime Nachrichten in einem Medium unauffällig zu verstecken.
Wenn man von irgendeinem Foto ausgeht und dann einen ganzen Farbkanal mit beliebigen Werten überschreibt, wird das einem Betrachter durchaus auffallen.Iwo, nüschts fällt auf. Ich übertrage ein Top-Modell mit dicken Ballons
und einen verrauschten Hintergrund mit manipulierten Pixeln.
Also, wenn das keine Kunst ist
-
14 Pixel a 3 Byte.
Wie lautet die versteckte Nachricht ?001100010011001100110110
011101111101001000000101
111111111001100101000000
011111111101101100010101
111101101001101100000000
011111111001101111000001
111111111100100000000000
111101111101001110000001
011110111001100001000100
111111111101101110000101
011110111101111001000000
111011111101110101010001
011101111101101011000100
111111111101101001010001Tip: Der erste Pixel ist der 'Header'.
MfG d.k.
-
Selbsternannte Krypto-Spezies begreifen das wohl nie :
Cyphertext ohne Hinweis auf das Chiffrierverfahren kann alles heißen und alles ist auch die einzige Lösung.
Der Hinweis auf den "Header" ist völlig sinnfrei.
Frag Bob + Alice, die kennen sich damit aus.
-
kannste mal sehen, selbst solche 14 poplige pixel scheinen für dich unknackbar zu sein
-
Hast es also immer noch nicht begriffen ?