2017-01-04 7 views
2

簡単な暗号化プログラムを作成しようとしていますが、簡単に暗号化して解読することはできません。 は、これまでのところ、私は基本的な入力を設定している:私はちょうどJavaで出始めていると、これは私自身それが遅い起こっている教えているように私の最初の本当のプログラムであるシンプルな暗号化プログラムを作成しようとしています

import java.util.Scanner; 
class test { 
private static Scanner inp; 
public static void main(String[] args) { 
    inp = new Scanner(System.in); 
    System.out.println("Input Password"); 
    int n = inp.nextInt(); 
    System.out.println(n); 
    if(n!=234) { 
     System.out.println("Denied Acess"); 
    } else { 
     System.out.print("Password Accepted"); 
    } 
    System.out.print("Input Text to encrypt: "); 
    String m = inp.next(); 
    System.out.println(m); 
} 
} 

:Pを(私はほんの数を開始しました

:日前)

とにかく私は、文字/数字を対象とし、それらが対応するプリセット文字列に

例を変更することができプットを大量の入力を取り、質量を持ってする方法が必要です

input text: Hello

output text: {aeh}{wer}{qds}{qds}{cxv}

しかし、入力時に出力コードを読み取って、それ以外の場合は

のようなif nestを実行できない限り、複数の数字でそれを行うことができるかどうかわからない元の入力を出力する方法も必要です
if(dig1==a) { 
if(dig2==b) { 
    if(dig3==c) { 
System.out.print("a") 
} else { 
if(dig1==b) { 
    if(dig2==c) { 
    if(dig3==d) { 
System.out.print("b") 
} else { 
if (dig1==c) { 
if (dig2==d) { 
ect. 

それでも、私はプログラムが自動的に各桁を割り当てることができますので、それを自動的に設定する方法がわからない/変数を設定し、それを持って対応する文字列に

答えて

2

を入れて、私はとしてあなたの質問をお読みください。文字列を変換するコードが既にあります

"He" 

"{aeh}{wer}" 

そして今、あなたは合理的な方法でそれを逆にする方法を求めています。

一つのオプション:

Map<Character, String> encryptionMappings = new HashMap<>(); 
encryptionMappings.put('H', "{aeh}"); 
encryptionMappings.put('e', "{wer}"); 
... and so on: one put() for all characters you wish to support 
Map<String, Character> decryptionMappings = new HashMap<>(); 
decryptionMappings.put("{aeh}", 'H'); 
... as above, just "reversed" 

今、あなたのようなコードを書くことができます:あなたにあなたのマッピングが簡単に利用できるようにMap<String, String>を使用

String encryptMe = "He"; 
StringBuilder builder = new StringBuilder(); 
for (Character c : encryptMe.toCharArray()) { 
    builder.append(encryptionMap.get(c)); 
} 
String encrypted = builder.toString(); 

以上反復した文字によって文字列の文字を、そしてマップを使用して各文字を置き換える文字列を検索します。

デ-cryptのはかなり類似している:あなたは文字列のリスト/配列を反復処理することができます

String[] deecryptMe = new String[] { "{aeh}", "{wer}" }; 
StringBuilder builder = new StringBuilder(); 
for (String str : deecryptMe) { 
    builder.append(deecryptionMap.get(str)); 
} 
String decrypted = builder.toString(); 

(注意してください:上記の「擬似コード」として意味する;私は、コンパイラを介して実行didntの。あなたが行っていることを簡略化するためにそれらを利用する方法を教えてくれます)

それ以外では、暗号化マップを手動で置く必要はありません。 ビルドすることができます。実行時に、もう一方のマップを繰り返してそこから情報を取得します。

最後に、1つのコア部分は、単一責任原則に準拠することです。

更新:文字列の暗号化/復号化... です。「スキャナ」を使用してください。意味:文字列を受け取り、暗号化されたStringを返すメソッドで始まります。それをテストしてください。次に、復号化するメソッドを作成します。 。(あなたは、例えばdecrypt(encrypt("whatever")).equals("whatever")ことを確認するよう

を素敵なことを行うことができ、そのすべてが働くとき、あなたはユーザに入力を要求するコードを記述し、そしてあなたの文字列を与え、これを使用したものにその後、フィード

+0

まだ暗号化コードはありませんが、基本入力を設定していて、コードの作成に取り組んでいます。私はちょうど例としてsom erndomシーケンスを選択しましたが、3桁に対応する各桁が必要です桁数字 – Heyo13579

+0

だから私はコードの開始時にマップを繰り返します:map(string、string); map(string、String); ....そしてあなたが書いたコードで地図を呼び出すと、コード?私はtと同様にスキャナを特定する必要があります彼はthouhgを動作させるためのコードですか? – Heyo13579

+0

私はどのように複数のマッピングを実装するかの例を教えてください – Heyo13579

関連する問題