Steganograph???
-
Hat jemand eine Idee, wie ich Text und Bilder (irgendwelche Datenstreams) in Bild oder Sounddateien vertstecken kann??
Ich suche auch den den Aufbau von Wave(.wav); MP3(.mp3); Bitmap(*.bmp) und Jpg Dateien.
-
Die WAV und BMP Formate sind in der Windows Platform SDK Dokumenation dokumentiert ( http://msdn.microsoft.com/library/ ).
Das MP3 Format ist bei der MPEG Group oder dem Fraunhofer Institut zu bekommen.
Beim Verstecken von Dateien in Bildern, wie auch in Audiodaten bedient man sich der einfachen Methode, die Samples, die die Datei enthaelt (also z.B. Farbwerte oder Audiodaten) so abzuaendern, dass die Aenderung nicht auffaellt. Das geht z.B. in dem man nur die unteren Bits manipuliert. Bei Farben (mit 8-Bit Farbtiefe pro Kanal) sollte man nicht mehr als 2 Bit pro Sample, bei Audiodaten (bei 16 Bit pro Kanal) nicht mehr als 4 Bit auf einmal veraendern, sonst sieht bzw. hoert man's weil das Bild oder Sound verrauscht wirkt.
(EDIT: Bei Verfahren mit verlustbehafteter Kompression ist besondere Umsicht geboten, damit die Daten bei der Kompression nicht kaputt gehen; oder man aendert die bereits komprimierten Daten auf eine Weise, dass sie immernoch dargestellt/abgespielt werden koennen)
(EDIT II: Such mal im Internet nach Romana Machado, die hat die Steganographie erfunden, und nach ihrem Programm "Stego")
-
Was versteht man unter den unteren zwei Bits?
Kleines Beispiel wär interessant.
-
bei WAV und BMP sollte es nicht allzu schwer sein, aber mit den MP3-Daten umzugehen dann schon etwas anspruchsvoller. Beim Beispiel von PowerOff nutzt du eine bestimmte Anzahl der niederwertigsten Bits für exklusiv für deine Informationen. Wenn du ein 24Bit-Bitmap hast, so hast du pro Farbkanal 8 Bit. Wenn du das unterste Bit nach Belieben veränderst, verändert das die Bildinformation nur sehr geringfügig, da es ja insgesamt 256 Zustände gibt. Also "löscht" du jeweils das kleinste Bit und tust deine Informationen in einem bestimmten Format rein. Wenn du ein 1024x768 BMP hast mit 24Bit und nutzt jeweils die 2 untersten Bits, so könntest du (2 Bits * 3 Kanäle * 1024 * 768)/8 Bytes an versteckten Informationen speichern. Genauso beim unkomprimierten WAV-Format. Bei anderen Formaten musst du dir etwas speziell darauf zugeschnittenes einfallen lassen, dass die normale Nutzung und den Informationsgehalt nicht stark einschränkt ausdenken.
Empfehlenswert wäre es auch, eine Prüfsumme mit einzubauen und Informationen mehrfach zu speichern, sodass erkannt werden kann, ob die versteckten Daten noch heil sind oder damit sie auch nach leichter Änderung des Bildes noch auslesbar sind.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Tc++H schrieb:
Was versteht man unter den unteren zwei Bits?
Kleines Beispiel wär interessant.Zahlenwert: 80 Datengroesse: 8 Bit Kodierung: 0x50 (hexadezimal) oder binaer 01010000 0101 0000 obere Bits --->^^^^ ^^^^<--- untere Bits deswegen, weil Bit-Nr. 7 6 5 4 3 2 1 0 -------------------------- Wert 0 1 0 1 0 0 0 0 Jedes Bit entspricht einer Zahl zur Basis zwei, also: 2^0 = 1 2^4 = 16 2^1 = 2 2^5 = 32 2^2 = 4 2^6 = 64 2^3 = 8 2^7 = 128 16 + 64 = 80, also 01010000
Aendert man nun z.B. die unteren 2 Bits, also Bit 0 und Bit 1, z.B. in "11", aendert sich der Zahlenwert von 80 in 83:
Zahlenwert: 83 Datengroesse: 8 Bit Kodierung: 0x53 (hexadezimal) oder binaer 01010011 <--
hilft?
-
Ah, ja, hat mir auf jeden Fall geholfen !
-
muss man da aber nicht schauen ( bei direkter bit manipulation ) ob es sich um big oder little endian handelt?
-
MCU schrieb:
muss man da aber nicht schauen ( bei direkter bit manipulation ) ob es sich um big oder little endian handelt?
Ja klar aber nicht, wenn man von vornherein erwähnt, dass die niederwertigsten Bits genutzt werden sollen, dann impliziert sich das ja
-
MCU schrieb:
muss man da aber nicht schauen ( bei direkter bit manipulation ) ob es sich um big oder little endian handelt?
Solange Du mit einzelnen Bytes hantierst, brauchst Du die Endianness nicht zu beruecksichtigen. In C ist die Bitdarstellung zudem festgelegt (d.h. Bit 0 ist unten). Es gibt Prozessoren, bei denen die Bits andersrum notiert werden, aus der Sicht eines C Programmierers spielt das aber keine Rolle.
Meist bezieht sich der Begriff auf die Anordnung von Bytes bei breiteren Datentypen, also short, int, usw.
Im Big Endian Modell (meist von Motorola Prozessoren verwendet) werden die hoeherwertigen Bytes an niedrigeren Adressen gespeichert:
Big Endian Modell Beispiel: 32-Bit Integer, hex 12345678 Adresse Byte 00000000 12 oberes Byte an niedrigster Adresse 00000001 34 00000002 56 00000003 78 unteres Byte an hoechster Adresse (Big Endian)
Im Little Endian Modell (meist von Intel-Prozessoren verwendet) werden die niederwertigen Bytes an niedrigeren Adressen gespeichert:
Little Endian Modell Beispiel: 32-Bit Integer, hex 12345678 Adresse Byte 00000000 78 Unteres Byte an niedrigster Adresse (Little Endian) 00000001 56 00000002 34 00000003 12 Oberes Byte an hoechster Adresse
EDIT: Da die Begriffe "Big Endian" und "Little Endian" einiges Verwirrungspotential beinhalten, da sie gelegentlich genau andersherum verwendet werden, je nach Betrachtungsweise, ist es besser von "MSB .. LSB Notation" bzw. "LSB .. MSB Notation" zu sprechen.