У меня есть следующая проблема:java read encrypted Объекты
У меня есть доступ к классу/объекту, который является Serializable.
public class Access implements Serializable {
private static final long serialVersionUID = 1L;
private URL website;
private String username;
private String password;
// + some methods
}
Теперь, записывая их в файл, я шифрую их с помощью шифрования. Похоже, это:
ЗАПИСЬ:
ObservableList<Access> userData;
userData = FXCollections.observableArrayList();
...
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key128);
File file = new File("./resources/saves" + username);
file.createNewFile();
CipherOutputStream cipherOut = new CipherOutputStream(
new BufferedOutputStream(new FileOutputStream(file, true)), cipher);
ObjectOutputStream out = new ObjectOutputStream(cipherOut);
userData.forEach((item) -> {
try {
out.writeObject(new SealedObject(item, cipher));
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
});
out.flush();
out.close();
ЧТЕНИЕ:
ObservableList<Access> access = FXCollections.observableArrayList();
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, key128);
CipherInputStream cipherIn = new CipherInputStream(
new BufferedInputStream(new FileInputStream("./resources/saves" + username)), cipher);
ObjectInputStream in = new ObjectInputStream(cipherIn);
SealedObject sealed;
while ((sealed = (SealedObject) in.readObject()) != null) {
access.add((Access) sealed.getObject(cipher));
}
Если я теперь загрузить файл кажется поврежден. Мне трудно найти ошибку. Я думаю, что проблема находится в функции нагрузки. Мне что-то здесь не хватает?
Ошибка:
java.io.StreamCorruptedException: invalid stream header: 3D23898C
Спасибо за ваше время & помощь! : *
Что произойдет, если вы закомментируете (де) шифрование из ваших методов? Можете ли вы написать и прочитать незашифрованный объект? – 9000
Я просто попробовал, и теперь я получаю исключение EOF во время чтения. Я, наверное, перепутаю петлю? ** РЕДАКТИРОВАТЬ ** Да, некоторые проблемы с циклом. Он отлично работает без шифрования. –
@ Emmanuel: Не я бы попробовал наоборот: писал и читал строку через потоки шифра, чтобы убедиться, что эта часть работает нормально. – 9000