Примитивное самодельное шифрование
Программа работает с файлами. Есть метод для записи, есть метод для чтения, есть метод для шифрования и расшифрования текста.
Однако при расшифровке первые 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 шт):
Если у вас Java 11 или выше, воспользуйтесь статическим методом readString() класса Files для чтения файла в строку:
String content = Files.readString(Path.of(filename));
И, соответственно, writeString() для записи строки в файл:
Files.writeString(Path.of(filename), content);
В вашей реализации чтения из файла есть баг, вы считываете файл построчно и теряете символ переноса строки между строками (так как метод readLine() считывает строку без символа переноса строки).