Vim 读取加密文件时不再提示输入加密密钥;为什么不,我怎样才能恢复它?

And*_* Mo 7 encryption vim dropbox cryptography macos

我最近开始使用 Vim 来加密文本文件(通过使用:X命令并在提示符下输入加密密钥)。如文档所述,当我重新打开文件并解密文本时,Vim 会提示输入该密钥。

今天,我打开了其中一个加密文件,但令我惊讶的是,Vim没有提示我输入任何密钥,而只是显示加密文本。我当然多次重新打开文件,但结果总是相同。(我在 OS X 上使用 Vim 7.3。我发现 MacVim 与非 GUI 版本的行为没有区别。)

对于可能导致此问题的原因,我有三个模糊的预感:

  1. 在加密后,我重命名了有问题的文件——可能不止一次。不幸的是,我实际上不记得自从最近一次重命名以来我是否成功解密了文件。
  2. 该文件存储在我的 Dropbox 文件夹中,因此如果该文件在 Dropbox 服务器上以某种方式进行了更改,该版本可能会覆盖我(以前很好的)本地版本。(但是,当我尝试通过 Dropbox 恢复文件的旧版本时,我只能找到该文件的一个版本,而且我也无法解密。)
  3. 结合以上两者:我实际上重命名了文件,以便它有一个.crypt扩展名,不认为这在本地会很重要,但我看到 Dropbox 实际上将此文件(在Kind列中)标识为file crypt. 如果 Dropbox 将该文件识别为加密文件,它可能会以某种方式处理该文件?(但是,当我存储扩展名为 的未加密文本文件时.crypt,阅读它没有任何问题。)

我尝试使用 openssl 来恢复文件,特别是作为openssl bf -d -in [encrypted file] -out [decrypted file]. 但是这个报告bad decrypt 1948:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:/SourceCache/OpenSSL098/OpenSSL098-47/src/crypto/evp/evp_enc.c:330:(或略有变化)。

(让我先发制人地表明,我 99% 确定这不是我使用错误的加密密钥的情况,因为我过去曾多次成功解密文件,现在 Vim 甚至没有提示输入密钥。我还仔细检查过我在 openssl 中使用了正确的键。)

我使用了 Vim 的默认加密,据我所知,它在 7.3 中是河豚(尽管我尝试了一些其他的带有 openssl 的密码命令,但不确定哪个(如果有)对应于 pkzip,我理解它是 Vim 的旧加密算法。)

:help encryption除了尝试使用:set key=以确保 Vim 提示我输入加密文件的密钥外,我没有发现任何相关性,但它仍然没有。这是我在其他地方发现的有些类似问题中提出的唯一解决方案(例如,这个问题,尽管在我的情况下键入 key sans prompt 只是被解释为在正常模式下启动的命令)。

最后,知道有问题的文件的开头(在所有加密垃圾之前)是“Salted”可能会有用。如果 Vim 对加密密钥进行了加盐处理,那么加盐是否会以某种方式丢失(在,咳咳,外行的术语中)?

为了清楚起见,我的主要问题是:

  1. 是什么导致 Vim 不再将文件视为已加密且需要解密密钥?即使我无法恢复文本,如果可能的话,我也希望将来能够避免这种情况。例如,将加密文件与 Dropbox 同步是一个很大的禁忌吗?
  2. 还有什么我可以尝试恢复文本的吗?即使是蛮力似乎也不可能,因为它不是一个缺失的关键问题,但也许我滥用了 openssl 或忽略了另一个 Vim 解决方案。

谢谢!

———

编辑:我注意到其他可能相关的东西。我试图复制这个问题,在此过程中我注意到,如果我使用“快速查看”查看文件或打开它,使用“好的”加密 Vim 文件(即我可以成功解密的文件)在 TextEdit 中,我只看到一行文本,内容类似于VimCrypt~01!9‰?ëMå Ø^e?.œ1b_öä?ß?. 但是当我打开我遇到问题的文件时,我得到了 130 行明显的密文,第一行以Salted(如上所述)开头。

Hep*_*ite 6

我将不按顺序处理您查询的各个部分,希望不会引起混淆。

根据您的编辑,我认为您的文件已损坏,Vim 无法打开它。所有使用 Vim 内部加密的文件都应该以 " VimCrypt~N"开头,其中 " N" 是一个数字(目前只支持 01 和 02)。您的文件以 " Salted"开头令人困惑,但确认 Vim 不会将该文件识别为 Vim 加密文件。

移动或重命名文件不应影响 Vim 将其识别为加密的能力,只要您继续使用正确的密钥,它应该可以毫无问题地解密。文件扩展名对于 Vim 应该同样没有意义,因为它会查看文件内容以确定它是否是 Vim 加密文件。

我还在 Dropbox 中保存了一个 Vim 加密文件,我没有遇到损坏的问题。

您提到您认为这Blowfish是 Vim 的默认加密方案。这是不是这种情况。默认值是zip“便宜且快速”并且(可能)易碎。它也是 Vim 支持的第一种加密方法,这也是它成为事实上的默认设置的原因。如果你想默认为Blowfish你需要在你的 vimrc 中加入以下内容:

:set cryptmethod=blowfish
Run Code Online (Sandbox Code Playgroud)

通过在寻呼机或其他编辑器中打开文件(或者甚至在 Vim 中打开它而不输入密钥)并查看上面提到的标题前缀文本,您实际上可以确定在文件中使用了哪个而无需在 Vim 中打开它。如果它说“ VimCrypt~01”,那就是zip方法。如果它说“ VimCrypt~02”,它使用更强的Blowfish方法。(您会注意到您在编辑中发布的标题示例显示为“ 01”。)

如果您当前正在编辑解密文件,您还应该能够通过键入“:set cryptmethod?”来确定使用哪种方法。(问号是命令的一部分)。