2016-06-30 23 views
3

Ich muss eine Nachricht von der obersten Zeile der Pixel in einem BMP-Bild entschlüsseln. In dem roten Wert in binär ist eine Nachricht versteckt. Ich habe versucht, einen Weg zu finden, dies zu tun und nicht erfolgreich, weil die meisten Programme .jpg oder .png Dateitypen für Bilder und BMP-Bilder nicht in diesem Code arbeiten. Ich muss herausfinden, wie man diesen Code umwandelt, um die Nachricht mit Arrays zu entschlüsseln, und ich muss die Nachricht in ASCII-Text drucken. Für einige Programme erlaubten sie mir, die obere Zeile des Bildes zu ordnen, aber ich weiß nicht, wie ich es drucken soll. Hier ist der Code zum Codieren der Nachricht in dem Bild:Wie man diesen Code umwandelt, um die Nachricht von der obersten Zeile zu entschlüsseln

import java.awt.*; 
class Encode 
{ 
    public void encodeMessage(Picture image, int [] binaryArray) 
    { 
     Pixel pixelTarget = new Pixel(image,0,0); 
     Pixel [] pixelArray = image.getPixels(); 
     Color pixelColor = null; 
     int redValue = 0; 

     for(int x = 0; x < binaryArray.length; x++) 
     { 
      redValue = binaryArray[x]; 
      pixelTarget = pixelArray[x]; 
      pixelTarget.setRed(redValue); 
     } 
     pixelTarget = pixelArray[binaryArray.length]; 
     pixelTarget.setRed(255); 

     image.write("SecretMessage.bmp"); 
     image.explore(); 
    } 
} 
public class EncodeTester 
{ 
    public static void main(String[] args) 
    { 
     int[] bitArray = {0,1,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1};  
     Picture image = new Picture("earth.bmp"); 
     Encode message = new Encode(); 

     message.encodeMessage(image, bitArray); 

    } 
} 

Könnte jemand bitte erklären, wie fortzusetzen oder einen Beispielcode zu schreiben, bis mir die bmp-Datei zu lesen, die roten Werte von Arrays erhalten und drucken Sie es aus in ASCII-Text. Danke

EDIT: Dies ist nicht genau steganography. Es ist anders, da der Code nur in der ersten Zeile verborgen ist und ich int [] -Arrays verwenden muss, um alle Pixel zu gruppieren, dann die obere Zeile der Pixel zu ordnen und dann die roten Werte im ASCII-Text auszudrucken.

Antwort

1

Ich bin nicht vertraut mit den Klassen Picture und Pixel, da sie nicht in der Standard-Bibliothek sind, aber wenn this ist die Pixel Klasse, die Sie verwenden, versuchen Sie Folgendes:

  • eine Methode erstellen decodeMessage(Picture image) und erhalten ein Pixel Array mit image.getPixels() genau wie Sie in encodeMessage() getan haben.
  • Schleife durch die Nachricht Bits (mit der 255 Sie am Ende der Codierung als Indikator für die Sequenz endet setzen) und lesen Sie die Werte mit pixelTarget.getRed(). Diese Werte entsprechen den codierten Binärwerten. Generiere ein Array für diese Bits.
  • Jetzt müssen Sie jeden Block von 7 Bits in eine ganze Zahl umwandeln. Verwenden bitweise Operationen, wie sie here tat und warf die resultierenden Werte intchar Werte (wie here). *
  • umrechnen char Array an eine String durch das Array zu den String Konstruktor.
  • Die Zeichenfolge drucken.

(*) Beachten Sie, dass binäre Darstellungen eindeutig sind, so müssen Sie entscheiden, was Byte-Reihenfolge Sie für die ASCII-Bits verwenden.