C# Quellcode - 20.7 Kb

Worum geht es?

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 versteckt Nachricht ist endlich unsichtbar, da nur das niedrigste Bit einer Farb-Komponente geändert wird.

Ende des Regenbogens

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:

typisches farbiges Rauschen

Auf Farbfotos sind diese Regenbogen-Pixel vielleicht akzeptabel.
Als monochromes Rauschen sieht die gleiche Nachricht im gleichen Bild so aus:

typisches graues Rauschen

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.

Bits lesen und setzen

Ein Byte über acht Pixel verteilen

Für jedes Byte der Nachricht müssen wir

  1. Ein Pixel holen
  2. Das erste Bit des Nachrichten-Bytes holen
  3. Eine Farb-Komponente des Pixels holen
  4. Das erste Bit der Farb-Komponente holen
  5. Wenn sich das Farb-Bit vom Nachrichten-Bit unterscheidet, es setzen/zurücksetzen
  6. Das gleiche mit den anderen sieben Bits tun

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...

Nachricht verstecken

...und Extrahieren so:

Nachricht auslesen

Das ist genug Text für diese Seite. Wenn Du mehr Details wissen möchtest, solltest Du den Quellcode herunterladen.