Примитивное самодельное шифрование

Программа работает с файлами. Есть метод для записи, есть метод для чтения, есть метод для шифрования и расшифрования текста.

Однако при расшифровке первые 3 символа отображаются корректно, а последующие нет.

Будьте любезны, ткните носом, где я ошибся?

Алгоритм шифрования примитивный, я сам придумал как его сделать, и мне, если честно, просто было интересно справлюсь я с самостоятельной реализацией этого алгоритма или нет, так что по поводу эффективности шифрования не парьтесь.

public String readFile(String file) throws IOException, FileNotFoundException {
    StringBuilder builder = new StringBuilder();
    BufferedReader reader = new BufferedReader(new FileReader(file));
    while (reader.ready()) {
        builder.append(reader.readLine());
    }
    return new String(unDeCrypt(builder.toString()));
}
public void writeFile(String word, String file) throws IOException {
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file, true));
    bos.write(unDeCrypt(word + "\n"));
    bos.flush();
}

Метод с шифрованием:

private byte[] unDeCrypt(String word) {
    BitSet encryptionWord = BitSet.valueOf("Inmart9309706inmarT".getBytes());
    BitSet newWord = BitSet.valueOf(word.getBytes());
    for (int i = 0; i < newWord.size(); i++) {
        if (encryptionWord.get(i)) {
            newWord.flip(i);
        }
    }
    return newWord.toByteArray();
}

Прошу с пониманием отнестись к манере написания кода, я только учусь.


Ответы (1 шт):

Автор решения: Vadik

Если у вас Java 11 или выше, воспользуйтесь статическим методом readString() класса Files для чтения файла в строку:

String content = Files.readString(Path.of(filename));

И, соответственно, writeString() для записи строки в файл:

Files.writeString(Path.of(filename), content);

В вашей реализации чтения из файла есть баг, вы считываете файл построчно и теряете символ переноса строки между строками (так как метод readLine() считывает строку без символа переноса строки).

→ Ссылка