Die Anwendung aus Teil 2 fügt sichtbares Rauschen in die Träger-Bilder ein. In diesem Artikel werden die Bytes aufgeteilt und jedes Bit in einem anderen Pixel versteckt. Die versteckte Nachricht ist endlich unsichtbar, da nur das niedrigste Bit einer Farb-Komponente geändert wird.
Ein ganzes Byte einer RGB-Farbe zu ersetzen verursacht ein Regenbogen-Muster. So sieht ein weisses Bild (alle Pixel einfach nur weiss) aus, nachdem ein Text darin versteckt wurde:
Auf Farbfotos sind diese Regenbogen-Pixel vielleicht akzeptabel. Als monochromes Rauschen sieht die gleiche Nachricht im gleichen Bild so aus:
Wie man sieht wurden zu viele Bits der Pixel geändert. Jetzt werden wird jedes Byte über acht Pixel verteilen, so dass der Regenbogen verschwindet.
Für jedes Byte der Nachricht müssen wir
Die C#-Funktionen zum Lesen und Setzen einzelner Bits sind einfach:
private static bool GetBit(byte b, byte position){ return ((b & (byte)(1 << position)) != 0); } private static byte SetBit(byte b, byte position, bool newBitValue){ byte mask = (byte)(1 << position); if(newBitValue){ return (byte)(b | mask); }else{ return (byte)(b & ~mask); } }
Der Rest des Codes hat sich kaum geändert. Verstecken funktioniert jetzt so…
…und Extrahieren so:
Das ist genug Text für diese Seite. Wenn Du mehr Details wissen möchtest, solltest Du den Quellcode herunterladen.