Потоковый шифр с использованием Java

Я пытаюсь создать потоковый шифр с использованием Java, в котором я беру простой текст из файла, зашифровываю его (Simple 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();

1 ответ

Вы смешиваете двоичные файлы, символы и строки без достаточного ухода. XOR'ing символов может привести к тому, что символ не будет представлять строку. Если два одинаковых символа объединены в XOR, то результатом будет нулевой символ, обычно интерпретируемый как END of FILE.

Вместо этого лучше хранить все в двоичном виде, когда XOR'ing. XOR - это двоичная операция, а не операция над символами. Так что вместо этого вы используете байтовые массивы.

Другие вопросы по тегам