Как безопасно удалять файлы в java
-
21-08-2019 - |
Вопрос
Как мне безопасно удалять файлы в 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() для файла?