是否可以用java覆盖文件,使其无法恢复?
我正在写一个加密程序来加密文件 我希望加密的内容将替换原始内容,使其无法通过恢复程序恢复(即,使用与原始内容相同的内存地址) 假设加密内容的大小与原始内容相同 我想是否可以用java覆盖文件,使其无法恢复?,java,filesystems,Java,Filesystems,我正在写一个加密程序来加密文件 我希望加密的内容将替换原始内容,使其无法通过恢复程序恢复(即,使用与原始内容相同的内存地址) 假设加密内容的大小与原始内容相同 我想File.renameTo()不会起作用,因为它与平台无关,所以有点不可预测 请原谅我没有发布我的完整代码(duh!),但我使用缓冲输入/输出流来读/写数据。在某些情况下(在某些操作系统上,在某些文件系统上,带有一些装载选项),可以让您执行您想要执行的操作。还要考虑如何将敏感数据保留在Java堆之外。。。例如,避免将String用作从
File.renameTo()
不会起作用,因为它与平台无关,所以有点不可预测
请原谅我没有发布我的完整代码(duh!),但我使用缓冲输入/输出流
来读/写数据。在某些情况下(在某些操作系统上,在某些文件系统上,带有一些装载选项),可以让您执行您想要执行的操作。还要考虑如何将敏感数据保留在Java堆之外。。。例如,避免将String
用作从未加密文件构造并随后写入加密文件的对象的一部分。然而,在其他情况下,你的建议是根本不可能的。如GNUshred的手册页所述
注意:请注意,shred依赖于一个非常重要的假设:
文件系统就地覆盖数据。这是传统的方式
但许多现代文件系统设计并不能满足这一要求
假设。以下是文件系统的示例,在这些文件系统上
无效,或不能保证在所有文件系统模式下都有效:
- 日志结构或日志记录的文件系统,如随
AIX和Solaris(以及JFS、ReiserFS、XFS、Ext3等)
- 写入冗余数据的文件系统,即使有些
写入失败,例如基于RAID的文件系统
- 制作快照的文件系统,如Network Appliance的NFS
服务器
- 缓存在临时位置的文件系统,如NFS版本3
客户
- 压缩文件系统
我已经使用下面的链接建立了一个基础,并根据我的工作场所要求进行了更改。我们也做了同样的事情,但是使用了更为奇特的东西,如db驱动的键,用户提供的文件@user3509208这是一段很好的代码,但不是我要求的。在您的示例中,删除原始文件后,它可以很容易地恢复。