Como excluir arquivos de forma segura em java
-
21-08-2019 - |
Pergunta
Como faço para arquivos com segurança de exclusão em java? Eu tentei o código em javafaq.nu , mas o problema é que você realmente não pode excluir o arquivo no Windows, uma vez que foi mapeada devido a este bug .
Então eu tentei apenas usando sysinternals SDelete em janelas, mas você tem que clicar em um contrato de utilização a primeira vez que você usá-lo que eu quero evitar.
Solução
Em um journaling como NTFS não há realmente nenhuma maneira de apagar com segurança um único arquivo sem limpar todo o espaço livre na unidade. O problema é que os novos blocos (que você provavelmente escrito com dados aleatórios) não são garantidos para ser no mesmo lugar no disco como os antigos.
Utilitários como o trabalho de força SDelete para você, mas pode-se simplesmente substituir esse executável com um que não faz nada para impedir que o método de defesa.
A fim de manter seus dados seguros, a única solução real que você tem é criptografar completamente a unidade.
Outras dicas
I codificados e tentou esta função, e pareceu-trabalho:
public static void secureDelete(File file) throws IOException {
if (file.exists()) {
long length = file.length();
SecureRandom random = new SecureRandom();
RandomAccessFile raf = new RandomAccessFile(file, "rws");
raf.seek(0);
raf.getFilePointer();
byte[] data = new byte[64];
int pos = 0;
while (pos < length) {
random.nextBytes(data);
raf.write(data);
pos += data.length;
}
raf.close();
file.delete();
}
}
Talvez fazer deleteOnExit () no arquivo?