2016-02-11 68 views
3

我经常在vim中使用:x命令来加密我的计算机上的文件。最近我想用ruby对这些文件进行一些处理。如何用ruby脚本打开用Vim加密的文件(我知道“密码”)

我有一个应用程序,它具有env vars中的所有“秘密”。我的想法实际上是只有一个秘密'密码'env var。我正在考虑为这个和未来的应用程序提供一种方法,我只需要一个加密文件,我可以使用我所有的敏感数据保持源代码控制,然后只需维护一个env var。不知道这是多么可行。

有没有办法用ruby阅读它们,甚至可以保存它们?

我目前的想法是以某种方式直接从ruby调用vi,在命令中传递密码,并以某种方式获得输出。我不知道这是否可能,并且我很难发现是否可以。

感谢

+0

你知道哪个加密算法正在使用VIM? (':setlocal cm?')你应该可以用ruby打开文件,并使用适当的加密类型库对它进行解密。 – Greg

+0

:setlocal cm? => zip – pixelearth

+0

只需在ruby中搜索zip解密程序,zip也称为“标准加密” – sidyll

回答

1

我没有红宝石的专业知识,但是,如果你不介意以纯文本暴露你的密码,你可以用Vim写文件内容到标准输出:

$ vim -Nesc 'set key=some\ passphrase | e foo.txt | %p | q!' 
foo bar 

如果已设置,Vim将使用key作为密码,否则会提示。所以,你可以设置key,然后打开文件,并打印全部(%p),然后退出。我在silent ex-mode (-e -s)中运行它,关闭兼容性(-N)。

您可以使用Getting output of system() calls in RubyRunning a command from Ruby displaying and capturing the output来处理Ruby部分。前者的第二个答案也许可以与存储在变量中的密码一起使用。

可以适应这个环境变量:

$ pass='some password' vim -Nesc 'let &key = $pass | e foo.txt | %p | wq!' 
foo bar 
+1

有趣的想法,但由于他使用的是zip加密,如果是用ruby调用外部工具,我认为只需调用zip实用程序来完成这项工作就更加高效且不言自明。 – sidyll

+0

我在发帖前试过:Archive :: Zip :: UnzipError:无法找到中央目录结束记录 – pixelearth