2016-12-24 4 views
0

私は現在Javaで構築した暗号システムを開発中です。暗号処理の前に、以下を行う最も効率的な方法を見つける必要があります。単語を分割して数字に符号化する

文字列(fe 'plaintext ")を取得した後、文字に分割して数値にエンコードする必要があります-25)。数字で符号化された暗号化されたメッセージは、()を文字にデコードされているように私は、逆の方法で上記の操作を行う必要があり、暗号化処理の後

文字が再び一つの単語になる。

マイ主な目標は、できるだけ早くできることをすることです。

+2

方法だけを考えて前に、それをやっについてそれについて "あなたができる最速の方法"について?あなたがしなければならないものを正確に決めることから始めます。英語アルファベットの小文字だけを受け入れる場合でも、すでに25以上の異なる数字が必要です。 –

+0

さて、それは私が間違っているのは、小文字または大文字のみを受け入れること(あなたが望むものを選ぶこと)を受け入れることではなく、他のすべての文字は受け入れられないということです。だから私は0-25と言う。そして、私は各文字のマッピング、.splitメソッドなどを使用してそれをやったが、私はそれを行う最も効率的な方法が必要です。 –

答えて

0

ストリームを使用することもできますが、

str.chars().map(c -> c - 'a') // IntStream of 0-25 

オーバーヘッドをストリーミングするため、バイトを超える平野ループは最速になります。

byte[] bytes = str.getBytes(); // OK, since all chars are in range 0-127 
for (int i = 0; i < bytes.length; i++) 
    bytes[i] = bytes[i] - 'a'; 

そして逆に復号化するために/構造:

for (int i = 0; i < bytes.length; i++) 
    bytes[i] = bytes[i] + 'a'; 
String plain = new String(bytes); 
+0

プラットフォームのデフォルト文字セットに頼るのではなく、getBytes()およびnew String(bytes)でASCII文字セットを指定する必要があります。しかし、文字列の文字列を反復するのではなく、文字列をバイトセットにエンコードするのはなぜですか? –

+0

a-> 0、b-> 1、.... z-25のように番号を付けるだけですか?それは私が本当にやりたいことです。それは、以下のプロセスで暗号のモジュロ演算に移行する最善の方法です。 –