是否有可能覆盖java中的文件,因此无法恢复?

时间:2016-03-03 17:46:02

标签: java filesystems

我正在编写一个加密程序来加密文件。

我希望加密内容将替换原始内容,以便恢复程序无法恢复(即使用与原始内容相同的内存地址)。

假设加密内容的大小与原始内容相同。

我认为File.renameTo()不会起作用,因为它与平台无关,所以它有些不可预测。

请原谅我没有发布我的完整代码(呃!)但我使用Buffered Input/OutputStream来读/写数据。

1 个答案:

答案 0 :(得分:2)

在某些情况下(在某些操作系统上,在某些文件系统上,有一些挂载选项)APPLICATION USAGE section of the POSIX standard for echo将让您执行您想要执行的操作。还要考虑如何将敏感数据保留在Java堆之外...例如,避免使用-i作为从未加密文件构造的对象的一部分,然后写入加密文件。但是,在其他情况下,你提出的建议根本不可能。如GNU String的联机帮助页中所述,

  

注意:请注意,Shred依赖于一个非常重要的假设:那   文件系统将数据覆盖到位。这是传统方式   做事,但许多现代文件系统设计不满足这一点   假设。以下是shred的文件系统示例   无效或无法保证在所有文件系统模式下都有效:

     
      
  • 日志结构或日志文件系统,例如随附的文件系统      AIX和Solaris(以及JFS,ReiserFS,XFS,Ext3等)
  •   
  • 写入冗余数据的文件系统,即使有些也可以继续执行      写入失败,例如基于RAID的文件系统
  •   
  • 制作快照的文件系统,例如Network Appliance的NFS      服务器
  •   
  • 缓存在临时位置的文件系统,例如NFS版本3      客户端
  •   
  • 压缩文件系统
  •