Как безопасно удалить файлы в Java - PullRequest
2 голосов
/ 13 мая 2009

Как мне безопасно удалить файлы в Java? Я пробовал код на javafaq.nu , но проблема в том, что вы не можете удалить файл в Windows, если он был сопоставлен из-за этой ошибки .

Тогда я попытался просто использовать sysinternals sdelete в Windows, но вы должны нажать на соглашение об использовании в первый раз, когда вы его используете, которого я хочу избежать.

Ответы [ 3 ]

15 голосов
/ 13 мая 2009

Я закодировал и попробовал эту функцию, и она, кажется, работает:

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();
    }
}
6 голосов
/ 13 мая 2009

В файловой системе журналирования, такой как NTFS, фактически невозможно безопасно удалить один файл, не стирая все свободное место на диске. Проблема в том, что новые блоки (которые вы, вероятно, перезаписали случайными данными) не гарантированно находятся в том же месте на диске, что и старые.

Утилиты, такие как sdelete, могут работать на вас, но можно просто заменить этот исполняемый файл на тот, который ничего не делает, чтобы помешать этому способу защиты.

Для обеспечения безопасности ваших данных единственное реальное решение, которое у вас есть, - это полное шифрование диска.

0 голосов
/ 13 мая 2009

Может сделать deleteOnExit () для файла?

...