2013-04-19 2 views
0

Я только начал изучать информатику, и наш учитель дал нам это маленькое, но сложное программирование. Мне нужно декодировать изображение .bmp http://postimg.org/image/vgtcka251/, наш учитель вручил нам и после 4 часов исследований и попыток, я не ближе к его расшифровке. Он дал нам свой метод кодирования:Decode .bmp image

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 

public class HideMsgInPicture { 
    final static long HEADSIZE=120; 

    public static void main(String[] args) throws IOException { 
     encode(); 
     decode(); 
    } 
    private static void encode() throws IOException { 
     FileInputStream in = null; 
     FileInputStream msg = null; 
     FileOutputStream out = null; 
     try { 
      in = new FileInputStream("car.bmp"); 
      msg = new FileInputStream("msg.txt"); 
      out = new FileOutputStream("carX.bmp"); 
      int c,mb; 
      byte clearBit1 = (byte) 0xFE; //254; // 11111110 

      for (int i=1;i<=HEADSIZE;i++) out.write(in.read()); //copy header 

      while ((mb = msg.read()) != -1) { // for all byte in message 

       for (int bit=7; bit>=0; bit--) // 1 bit a time from messsage 
       { c = in.read() & clearBit1; // get picturebyte,clear last bit 
        c = (c | ((mb >> bit) & 1));// put msg-bit in end of pic-byte 
        out.write(c);    // add pic-byte in new file 
       } 
      } 

      for (int bit=7; bit>=0; bit--) // add 8 zeroes as stop-byte of msg 
      { c = in.read() & clearBit1; // get picturebyte,clear last bit 
       out.write(c);    // add pic-byte in new file 
      } 

      while ((c = in.read()) != -1) out.write(c);// copy rest of file 
     } 
     finally { 
      if (in != null) in.close(); 
      if (msg != null) msg.close(); 
      if (out != null) out.close(); 
     } 
    } 
} 

Может ли кто-нибудь отправить меня в правильном направлении?

+0

Что такое DYM 'decode'? Загружать изображение и манипулировать им легко, используя классы из пакета AWT. –

+0

Наш учитель (по его словам) закодировал изображение с некоторыми данными. Мы должны извлечь эти данные. Возможно ли это с AWT? – user2298680

+0

О, нет, я так не думаю. –

ответ

1

Как вы знаете о стеганографии? Самый простой алгоритм (который реализуется вашим назначением) - младший бит (LSB). Короче говоря, вы конвертируете свое сообщение в двоичный (то есть символ «a» = 01100001) и записываете отдельные биты в самые правые биты значений пикселей. Например, возьмите 8 пикселей (каждый из них представлен байтом), а в первом байте спрячьте 0, во втором 1, в третьем 1, в четвертом 0 и т. Д. Чтобы извлечь ваше сообщение, получите двоичную строку из LSB в ваших пикселях и преобразовать его обратно в текст.

Ваш учитель дал вам алгоритм сокрытия, поэтому в основном вам нужно написать алгоритм, который отменяет процесс. Вам не нужно смотреть дальше, вам просто нужно понять, что делает этот код. Просто встроенных комментариев должно быть достаточно.

Смежные вопросы