2016-05-04 4 views
0

Я создал простую программу шифрования для шифрования любого входного файла и сохранения его в новом выходном файле. В этот момент я получаю простой результат шифрования, однако я хочу использовать следующий шаблон в качестве шифрования текста в файле.
Шифрование и дешифрование Java Caesar Cipher

каждая буква с номером, соответствующим положению буквы в алфавите
каждая цифра с первой буквой названия числа

После шифрования будет сделано и работает, я хотел бы попробуйте расшифровать текст.

import java.util.Scanner; 
import java.io.PrintWriter; 
import java.io.IOException; 
public class CaesarCipher 
{ 
    private int key; 

    public CaesarCipher(int key) 
    { 
     this.key = key; 
    } 

    public char encrypt(char ch) 
    { 
     return (char)(ch + key); 
    } 

    public void encryptFile(Scanner in, PrintWriter out) 
     throws IOException 
    { 

     while(in.hasNextLine()) 
     { 
     String line = in.nextLine(); 
     for(int i = 0; i < line.length(); i++) 
     { 
      char ch1 = line.charAt(i); 
      char ch2 = encrypt(ch1); 
      System.out.print(ch1); 
      out.print(ch2); 
     } 
     if(in.hasNextLine())`enter code here` 
      out.println(); 
     } 
    } 
} 

Благодаря

+0

Возможно, вы захотите перефразировать свой вопрос. Я прочитал его и не мог понять, о чем вы спрашиваете. Насколько я могу судить, вы читаете из подсказки и пишете в «PrintWriter» где-то. В чем проблема? – Bonatti

+0

HI, обновленный вопрос лучше? Благодаря :) –

ответ

0

Из таблицы ascii-code ASCII код, мы знаем ASCII код каждой цифры и каждой буквы. Вы можете использовать это, чтобы сделать следующее в вашем методе encryptFile:

  1. Создать переключатель или перечисление на карту каждую цифру первого символа его имя. Пример: от 0 до 'z', от 1 до 'o', от 2 до 't' и т. Д.

  2. Проверьте, является ли ch1 цифрой, выполнив следующие операции: if (ch1 >= 0x30 && ch1 <= 0x39).

  3. Если значение true, то ch1 - это цифра. Получите письмо, соответствующее цифре, из вашего картографирования, и отобразите его.

  4. То же самое для письма: if (ch1 >= 0x61 && ch1 <= 0x7A).

  5. Если ch1 является буквой, вы можете преобразовать шестнадцатеричное значение ch1 в целое число с использованием Integer.parseInt(hex, 16) (например: 'a' будет 97) и вычесть из него константу 96). Итак, для 'a' вы будете показывать 1 (97-96 = 1), а для 'd' вы будете отображать 4 (100-96 = 4). Таким образом, вы получите позицию письма.

  6. Аналогичным образом, вы должны обрабатывать буквы верхнего регистра.

Существует множество способов достижения того, что вы пытаетесь сделать. Это одна из них. Это не обязательно лучший.