2016-12-09 14 views
0

ユーザーが入力した単語を暗号化する暗号化プログラムを作成していますが、入力された暗号化された単語を出力する以外はすべて動作します。ここに私のコードは、今のようになります。ユーザー入力を暗号化する

クラス1

public class Encryption { 

    String encrypt = "test"; 
    String key; 
    String message; 
    String alpha; 
    Encryption(){ 
     encrypt = Encrypt(); 
    } 
    private String Encrypt(){ 

     String[] alphabet = { 
       "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" , 
       "n" , "o" , "p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z" 

     }; 


     StringBuilder sbAlphabet = new StringBuilder(); 

     for (int i = 0; i <= 25; i++) { 
      sbAlphabet.append(alphabet[i]); 
     } 
     alpha = sbAlphabet.toString(); 
     return encrypt; 
    }   
} 

クラス2

package encryption; 

import java.util.Random; 

public class Key { 

    String key; 

    Key() { 
     key = genKey(); 
    } 
    private String genKey() { 

     String[] scrambled = { 
      "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" , 
      "n" , "o" , "p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z" 

     }; 

     int r; 
     String temp; 
     String key; 
     StringBuilder sbScrambled = new StringBuilder(); 

     for (int i = 0; i <= 25; i++) { 
      r = (int)(25*Math.random() + 1); 
      temp = scrambled[i]; 
      scrambled[i] = scrambled[r]; 
      scrambled[r] = temp; 
     } 
     for (int i = 0; i <= 25; i++) { 
      sbScrambled.append(scrambled[i]); 
     } 
     key = sbScrambled.toString(); 
     return key; 
    } 
} 

クラス3

package encryption; 

import java.util.Scanner; 

public class Message { 
    Key key = new Key(); 
    Encryption encrypt; 
    String message; 

    Message() { 
     System.out.println("Please enter an input:"); 
     Scanner user_input = new Scanner(System.in); 
     message = user_input.next(); 
     encrypt = new Encryption(); 
    } 

    public static void main(String[] args) { 

     Message message = new Message();   
     System.out.println(message.key.key); 
     System.out.println(message.encrypt.alpha); 
    } 

} 

暗号化クラスは、Keyクラスの暗号化をアルファベットを返します。アルファベットをランダムに表示してから表示し、Messageクラスは暗号化されたキーとアルファベットをユーザー。相続人は、あなたがそれを実行したときに、それがどのように見えるかの例:

:私は、コードを作成しようとしている何

Please enter an input: 

wew lad 

mbptwuklhanjrsedzqfcyvxogi 

abcdefghijklmnopqrstuvwxyz 

が行うが、それは次のようになりますので、暗号化されたアルファベットで、ユーザー入力を表示していますあなたは、暗号化クラスに、そこからあなたmessageMessage()の内側を通過した文字のすべてをループし、sの中でそれに相当するとmessage文字を交換する必要が

:あなたの質問に答えるために

Please enter an input: 

wew lad 

xwx jmt 

mbptwuklhanjrsedzqfcyvxogi 

abcdefghijklmnopqrstuvwxyz 

答えて

1

混乱したアルファベット。たとえば、文字Aの場合は、scrambled[0]と置き換えます。

これを行うには、ASCII Tableを見る必要があります。それは、私は非常にあなただけやったすべてのものを削除するお勧めと述べたと

public String encryptText(String message) { 
    message = message.toLowerCase(); 
    String encryptedMessage = ""; 
    for(int i = 0; i < message.length; i++) { 
     encryptedText += scrambled[message[i] - 'a' + 1]; 
    } 
    return encryptedMessage; 
} 

:そしてような何かを行います。暗号化に関しては、自分が行っていることを本当に分かっていない限り、独自のプロトコルを作成しようとすべきではありません。クラッキングは暗号化能力のある人にとっては簡単です。

ここで何をやっている、あなたがやるべきことの簡単な例ですhttps://stackoverflow.com/a/4487541/1327636

はクラックするのは非常に難しいことではありません換字式暗号、です。

  • あなたの暗号化されたテキストに文字の頻度をカウントして、元の文字を繰り返す探しletter frequency table

  • との比較:換字式暗号をクラックする方法がです。ZZ

  • 、パターンなどINGTHを繰り返し探しているようにThe

  • として人気の高い単語を見つけるために、単語の長さを見ると、周波数テーブルに暗号化された文字列の文字を比較するION

これらの4つのものを使用すると、代用暗号をクラックする際に非常に良い統計的確率を得ることができます。あなたがそれらについてもっと知りたいなら、私は見ていますhere.

+0

私はこの方法はあまり安全ではないと思いますが、私は初心者のJavaコースを取っています。私はこの方法でプロジェクトをやろうとしています。 –

+0

私は自分の投稿を編集して、あなたが望むものを達成する方法とそれがなぜ貧弱な暗号化方法であるのかを説明しました。私はこれが宿題/個人プロジェクトのいずれかであると仮定しました。 – user123

関連する問題