2016-05-04 19 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(); 
     } 
    } 
} 

ASCIIコード表ascii-codeから感謝

+0

あなたの質問を言い換えるとよいでしょう。私はそれを読んで、あなたが何を求めているのか理解できませんでした。私が知る限り、あなたはプロンプトから読んでいて、どこかの 'PrintWriter'で書いています。何が問題ですか? – Bonatti

+0

こんにちは、更新された質問が良いですか?ありがとう:) –

答えて

0

は、我々は、各桁の各文字のASCIIコードを知っています。あなたはencryptFile方法で次の操作を実行するためにそれを使用することができます

  1. スイッチまたはそれの名前の最初の文字に各桁をマップする列挙型を作成します。例:0〜 'z'、1〜 'o'、2〜 't'など... を実行してch1が数字かどうかを確認します。

  2. trueの場合、ch1は数字です。あなたのマッピングから数字に対応する文字を取得し、それを表示します。

  3. 同じもの:if (ch1 >= 0x61 && ch1 <= 0x7A)

  4. ch1が文字の場合、Integer.parseInt(hex, 16)(例: 'a'は97)を使用してch1の16進値を整数に変換し、それから定数96を減算することができます)。したがって、 'a'は1(97-96 = 1)を表示し、 'd'は4(100-96 = 4)を表示します。あなたが手紙の位置を得るこの方法。

  5. 同様に、大文字を扱う必要があります。

あなたがしようとしていることを達成するには、さまざまな方法があります。これはその一つです。それは必ずしも最良のものではありません。