Вопрос

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

Затем я попробовал просто использовать системные интерфейсы завершите в Windows, но при первом использовании вам придется нажать на соглашение об использовании, чего я хочу избежать.

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top