2014-02-14 3 views
-3

У меня есть приложение для шифрования текстовых файлов с помощью XOR. Теперь мне нужно изменить его на двоичные файлы кода (например, jpeg), используя другие двоичные файлы (в качестве ключа). Как я могу это сделать? Имеет ли что-то общее с бинарным смещением? Мне нужно это для учебных целей. Фрагмент моего кода, ответственный за текст шифрования:Java XOR шифрование двоичных файлов

ДЕЙСТВИЯ КЛАСС:

import javax.swing.JFileChooser; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 

public class Actions extends GuiElements { 

    final JFileChooser fc = new JFileChooser("D:"); 
    final JFileChooser fc1 = new JFileChooser("D:"); 

    public Actions() { 
     btnLoad.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       //Handle open button action. 
       if (e.getSource() == btnLoad) {  
        int returnVal = fc.showOpenDialog(Actions.this); 
        if (returnVal == JFileChooser.APPROVE_OPTION){ 
         File file = fc.getSelectedFile(); 
         String content = file.toString(); 
         FileReader reader = null; 
         try{ 
          reader = new FileReader(content); 
         } 
         catch (FileNotFoundException e1){ 
          e1.printStackTrace(); 
         } 
         BufferedReader br = new BufferedReader(reader); 
         try{ 
          textArea.read(br, null); 
         } 
         catch (IOException e1) { 
          e1.printStackTrace(); 
         } 
         try{ 
          br.close(); 
         } 
         catch (IOException e1) { 
          e1.printStackTrace(); 
         } 
         textArea.requestFocus(); 
        } 
        else{ 
        } 
       } 
      } 
     }); 

     btnCipher.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent click) { 
       String textToCipher = textArea.getText(); 
       String cipherKey = textField.getText(); 
       String cipheredText = ""; 
       int xor; 
       char temp; 
       for (int i=0; i<textToCipher.length(); i++){ 
        xor = textToCipher.charAt(i)^cipherKey.charAt(i % cipherKey.length()); 
        temp = (char)xor; 
        cipheredText += temp; 
       } 
       textArea.setText(cipheredText); 
      } 
     }); 

     btnSave.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       String textTosave = textArea.getText(); 
       JFileChooser chooser = new JFileChooser(); 
       chooser.setCurrentDirectory(new File("D:")); 
       int retrival = chooser.showSaveDialog(null); 
       if (retrival == JFileChooser.APPROVE_OPTION) { 
        try { 
         FileWriter fw = new FileWriter(chooser.getSelectedFile()); 
         String cont = textArea.getText(); 
         String content = cont.toString(); 
         fw.write(content); 
         fw.flush(); 
         fw.close(); 
        } 
        catch (Exception ex) { 
         ex.printStackTrace(); 
        } 
       } 
     }; 
    }); 
} 
} 
+0

Когда вы говорите «зашифровать», вы имеете в виду, что вы пишете это для задания, или вы на самом деле собираетесь написать свой собственный код шифрования и развернуть его где-нибудь? – user2357112

+0

Что нужно сделать с этим кодом GUI? Можете ли вы разбить его на минимальный пример? – Henry

+0

Что такое "textArea"? Он никогда не был объявлен. –

ответ

0

У вас есть два входных двоичных файлов: ключевой файл и исходный текст файла. У вас есть один выходной файл, файл cyphertext, который вы пишете и который также является двоичным. Файл ключа должен быть как минимум до файла открытого текста.

repeat 
    p <- read byte from plaintext binary file 
    k <- read byte from key binary file 
    c <- p XOR k 
    write byte c to cyphertext binary file 
until all bytes read from plaintext file 

Вы говорите, что ваше предыдущее усилие использовало текстовые файлы. Имейте в виду, что Java использует разные методы для чтения/записи двоичных файлов и текстовых файлов. Использование текстового метода в двоичном файле или наоборот, даст неверные результаты.

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