是否可以强制 gpg 进行就地加密?换句话说,用加密数据覆盖源(未加密)文件?
这就是 ccrypt(1) 默认的操作方式。
答案基本上是否定的,不是没有自定义代码。
gpg 可以对管道进行操作,因此如果有一种简单的方法可以破坏性地将数据发送到管道,那么这可能是可行的。但是没有。
避免快速用完磁盘的另一个想法是一次加密块(在自定义软件中)。
while !eof:
read()
encrypt()
write()
seek()
似乎 ccrypt 能够就地操作,因为加密数据的长度与解密数据的长度相同(我对加密知之甚少,但这可能只是块密码的一般属性)。GPG/PGP 执行压缩和添加标头之类的操作,因此输出数据的长度不会相同。如果它更短,没问题(上面的自定义代码应该可以工作)。如果它更长,则需要做更多的工作才能将溢出放置在其他地方。
此自定义代码增加了加密和解密的复杂性(和模糊性)。
gpg 通过使用原始文件名打开一个新文件并附加 .gpg 扩展名,然后将加密数据写入新文件来实现。如果一切正常,它会删除原始文件。
我不认为你想使用实际的就地加密,它会读取一个字节,加密它,将它写回文件等等......如果中途杀死 gpg 进程会发生什么通过?您现在得到了一个损坏的文件,其中一半的明文在微风中晃来晃去。