【问题标题】:gpg: overwriting .pdf on encryption => decryption failsgpg:在加密时覆盖 .pdf => 解密失败
【发布时间】:2012-06-21 08:49:25
【问题描述】:

我使用 gpg (GnuPG) 1.4.11。通过gpg -c foo.pdf 加密文件foo.pdf。然后加密文件为foo.pdf.gpg,此外,原始文件foo.pdf 存在。然后我可以按预期通过gpg foo.pdf.gpg 解密foo.pdf.gpg。但是,如果我使用gpg -o foo.pdf -c foo.pdf并选择在加密时覆盖现有文件,然后使用gpg foo.pdf解密加密文件,最后选择覆盖现有文件foo.pdf(再次),文件仍然受到保护并且无法查看。

然后我再次尝试执行gpg foo.pdf(我认为第一次解密失败,这就是我再次尝试的原因)。现在文件似乎已损坏:gpg: [don't know]: 1st length byte missing。有任何想法吗?覆盖文件通常不是一个好主意吗?我希望在加密后获得一个文件foo.pdf.gpg(原始文件foo.pdf被自动删除)。

【问题讨论】:

  • 也许加密到临时文件,删除原始文件并重命名?不过,听起来像一个错误。我希望 GNU 会在某个地方维护一个错误列表 - 可能会将其添加到他们的跟踪器中,并在另一台机器/平台上尝试以确保。
  • 我尝试加密它(因此获得foo.pdf.gpg)。再次解密时,它询问我是否要覆盖原始仍然存在的未加密文件foo.pdf。我选择了y,文件被覆盖了。但这一次,它可以打开了。
  • 嗯,所以问题是间歇性的? :(
  • 不,它是永久性的。只是我只在 decryption 上覆盖了文件(而不是在 *encryption 上)。最后,我相信无论如何都不应该使用覆盖功能。 Emacs(我的编辑器)无论如何都可以直接打开.gpg 文件(并提示输入密码)。
  • 正确的。可能是加密使用了一些流内容,要求在此过程中不修改输入,但解密不需要。但是,如果它可靠地产生损坏的输出,我会将其报告为错误,以防万一。

标签: pdf gnupg


【解决方案1】:

GPG 正在写入它正在读取的同一个文件(没有临时文件)。当它读取明文进行加密时,该数据正在被 GPG 正在写出的已加密数据破坏(反之亦然)。一般来说,这是行不通的(它就像一个过滤器用它的输出来修改它的输入)。

【讨论】:

    猜你喜欢
    • 2018-02-23
    • 2017-09-16
    • 2022-06-14
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 2011-09-02
    相关资源
    最近更新 更多