我正在编写一个加密程序来加密文件。
我希望加密内容将替换原始内容,以便恢复程序无法恢复(即使用与原始内容相同的内存地址)。
假设加密内容的大小与原始内容相同。
我认为File.renameTo()
不会起作用,因为它与平台无关,所以它有些不可预测。
请原谅我没有发布我的完整代码(呃!)但我使用Buffered Input/OutputStream
来读/写数据。
答案 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 客户端
- 压缩文件系统