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.

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top