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


7

我最近开始使用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中的blowfish(虽然我尝试使用openssl的一些其他密码命令,但不确定哪些,如果有的话,对应于pkzip,我理解为Vim的旧加密算法。)

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

最后,知道所讨论的文件的开头(在所有加密垃圾之前)是“Salted”可能有一些用处; 如果Vim加密了加密密钥,盐会不会丢失(in,ahem,layman的条款)?

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

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

谢谢!

---

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


1
您能否分享一下.vimrc文件中的相关设置?这只发生在一个文件或每个文件中吗?
greduan 2013年

我不确定我的.vimrc会对此产生什么影响; 唯一的事情,我能想象改变,我已经设置是文件autoreadsmarttabautoindentwrap,和showbreak
Andy Mo

1
我似乎无法复制这个。我创建了另一个文件,对其进行了加密,成功解密,重命名,成功解密,移动到Dropbox,并再次成功解密。我注意到的一件事是,当我在Finder中将扩展名更改为* .crypt时,仍然附加了隐藏的* .txt扩展名,并且OSX仍显示“TXT”文件图标。但即使在我用终端I消除* .txt扩展名之后,我仍然可以成功解密。
Andy Mo

1
嗯,确保Finder停止隐藏这些文件扩展名(在其设置中)。好吧,在很多情况下做很多测试。尝试重命名文件,等等。看看你是否能找到它的原因。此外,您显示的那些设置并不会对此产生影响。:)
greduan 2013年

1
经过多年迫使OS X显示扩展我显然已经失效,所以设置重新开始,至少!关于测试用例的好建议。
Andy Mo

Answers:


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

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

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


1
感谢所有好的信息,即使它证实了我对文件的恐惧!实际上,我认为那pkzip是默认的加密方法,并尝试使用openssl它,但我在研究这个时读到的东西让我觉得Vim已经<em>将</ em>的默认值改为blowfish7.3,而不仅仅是添加它。我的错。
Andy Mo

1
Bim Moolenaar是Vim的所有者和主要开发者,他们一旦建立起来就不喜欢更改默认设置。我想在这种情况下他应该有,因为我怀疑它会破坏任何东西。
Heptite 2013年

1
我刚刚发现VimCrypt~03是blowfish2
Pete
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.