Domanda

Come faccio a eliminare in modo sicuro i file in java? Ho provato il codice a javafaq.nu , ma il problema si è non può effettivamente eliminare il file in Windows una volta che è stato mappato a causa di questo bug .

Poi ho provato solo usando Sysinternals SDelete su Windows, ma è necessario fare clic su un contratto di utilizzo la prima volta che lo si utilizza, che voglio evitare.

È stato utile?

Soluzione

Su un filesystem journaling come NTFS non è in realtà un modo per cancellare in modo sicuro un singolo file senza cancellare tutto lo spazio libero sul disco. Il problema è che i nuovi blocchi (che hai presumibilmente sovrascritti con dati casuali) non sono garantiti per essere nello stesso posto sul disco di quelli vecchi.

Utilità come SDelete potrebbero funzionare per voi, ma si potrebbe semplicemente sostituire quella eseguibile con uno che non fa nulla per contrastare tale metodo di difesa.

Al fine di proteggere i dati, l'unica vera soluzione che hai è per crittografare completamente nell'unità.

Altri suggerimenti

ho codificato e provato questa funzione, e tutto sembrava funzionare:

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();
    }
}

Forse fare deleteOnExit () sul file?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top