안녕하세요 저는 다음과 같습니다.java 읽기 암호화 됨 객체
클래스/객체 액세스가 Serializable입니다.
public class Access implements Serializable {
private static final long serialVersionUID = 1L;
private URL website;
private String username;
private String password;
// + some methods
}
이제 File에 쓰기를 할 때 Cipher를 사용하여 암호화합니다. 다음과 같습니다
WRITING :
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();
READING :
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
당신의 시간 & 도움을 주셔서 감사합니다! : *
메소드에서 (de) 암호문을 주석 처리하면 어떻게됩니까? 암호화되지 않은 객체를 작성하고 다시 읽을 수 있습니까? – 9000
방금 시도해 보니 독서 중에 EOF 예외가 발생했습니다. 내가 아마 망쳐 버릴거야? ** 편집 ** 네 루프에 문제가 있습니다. 그것은 암호화없이 잘 작동합니다. –
@Emmanuel : 다른 방법을 시도해 볼 필요는 없습니다. 암호 스트림을 통해 문자열을 읽고 다시 읽음으로써이 부분이 제대로 작동하는지 확인하십시오. – 9000