Javaを使用してストリーム暗号を作成しようとしています。ファイルからプレーンテキストを取得して暗号化し(シード値を持つランダムキーを使用した単純なXOR)、別のファイルに保存してから復号化し、再び暗号テキストを取得しますファイルから復号化し(暗号化と同じキーを使用した XOR 操作)、ファイルに保存します。
しかし、大きな文字列を暗号化しようとしたときに問題に直面しています。文字列の半分は正しく復号化されていますが、残りの半分は判読できない形式のままです。
FileReader fileReader = new FileReader(file);
// Always wrap FileReader in BufferedReader.
BufferedReader bufferedReader =
new BufferedReader(fileReader);
FileWriter fileWriter =
new FileWriter(file2);
// Always wrap FileWriter in BufferedWriter.
BufferedWriter bufferedWriter =
new BufferedWriter(fileWriter);
while((line = bufferedReader.readLine()) != null) {
sb = new StringBuffer (line);
int lenStr = line.length();
int lenKey = String.valueOf(random).length();
// For each character in our string, encrypt it...
for ( int i = 0, j = 0; i < lenStr; i++, j++ )
{
if ( j >= lenKey ) j = 0; // Wrap 'round to beginning of key string.
//
// XOR the chars together. Must cast back to char to avoid compile error.
//
String key = random + "";
bufferedWriter.write((char)(line.charAt(i) ^ key.charAt(j)));
}
}
// Always close files.
bufferedReader.close();
bufferedWriter.close();