如何安全删除java中的文件

Dar*_*lst 2 java security delete-file

如何安全删除java中的文件?我在javafaq.nu上尝试了代码,但问题是,由于这个bug,你在映射后无法真正删除Windows上的文件.

然后我尝试在Windows上使用sysinternals sdelete,但是第一次使用时我必须单击一个使用协议,我想避免使用它.

Emr*_*mre 15

我编码并尝试了这个功能,它似乎工作:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)


Ger*_*ies 6

在像NTFS这样的日志文件系统上,实际上没有办法在不擦除驱动器上的所有可用空间的情况下安全地擦除单个文件.问题是新块(你可能用随机数据覆盖)不能保证在磁盘上和旧块一样.

像sdelete这样的实用程序可能对你有用,但是人们可以简单地将那个可执行文件替换为不会阻止这种防御方法的可执行文件.

为了确保您的数据安全,您唯一真正的解决方案是完全加密驱动器.