Javaでファイルを安全に削除するにはどうすればよいですか? javafaq.nuのコードを試してみましたが、問題は、このバグが原因で、マップされたファイルを Windows で実際に削除できないことです。
次に、Windowsでsysinternals sdeleteを使用してみましたが、最初に使用するときに使用許諾契約をクリックする必要があり、避けたいです。
Javaでファイルを安全に削除するにはどうすればよいですか? javafaq.nuのコードを試してみましたが、問題は、このバグが原因で、マップされたファイルを Windows で実際に削除できないことです。
次に、Windowsでsysinternals 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();
}
}
NTFS のようなジャーナリング ファイルシステムでは、ドライブのすべての空き領域を消去せずに 1 つのファイルを安全に消去する方法は実際にはありません。問題は、新しいブロック (おそらくランダム データで上書きされたもの) がディスク上の古いブロックと同じ場所にあるとは限らないことです。
sdelete のようなユーティリティが役立つかもしれませんが、その実行可能ファイルを、その防御方法を妨害するものではないものに単純に置き換えることができます。
データを安全に保つための唯一の解決策は、ドライブを完全に暗号化することです。
たぶん、ファイルに対して deleteOnExit() を実行しますか?