Imprimir (descriptografar) um arquivo criptografado vim

9

Eu uso a opção -x no vim para criptografar um arquivo. Eu leio esses arquivos muito mais vezes do que escrevo, então eu sempre uso cat e então lembro que ele é criptografado por causa do que mostra .. Então eu tenho que usar o vim, digitar a senha e depois sair usando :q . .

Existe alguma maneira de usar o cat (ou outro comando, é claro, passar minha senha para algum lugar) e apenas imprimir / obter o conteúdo? Ou talvez haja apenas uma opção vim que apenas imprime o conteúdo sem entrar no editor?

    
por Pablo Matias Gomez 07.06.2016 / 23:09

2 respostas

3

Dê uma olhada no vimdecrypt de código-fonte aberto:

Command line tool for decrypting vim-blowfish-encrypted files.

As of version 7.3 vim offers strong built in blowfish encryption/decryption, which for certain purposes is more convenient than filtering through gnupg. Unfortunately the resulting files can only be read back by vim which makes it hard to use them in batch processing or scripting. Also longevity of encrypted data is a concern if a program with the dependencies and size of vim is required to unlock it.

Vimdecrypt lifts two relevant files from the vim source, blowfish.c and sha256.c, and interfaces them in a simple command line tool. Data is read from a file, decrypted data is written to stdout.

vimdecrypt path_to_data

The password is obtained via GNU getpass which does not interfere with stdin/stdout redirection.

Vim's configure system is entirely stripped away which might have broken support for other platforms than the 32 bit i386 linux it was developed on. Since the two relevant files are taken from the vim project unmodified it should be trivial to restore support on other platforms by fixing the vim.h header.

    
por 28.07.2016 / 14:43
5

Esta não é uma solução elegante - é rápida e suja - mas funciona em arquivos únicos e você pode usá-la como um script de shell.

É uma sequência de três comandos que executam o seguinte:

  1. Abrir arquivo no vim (modo somente leitura): vim -R
  2. Salve o arquivo em texto sem formatação e saia: -c ":set key= | sav ${filename}.plain | q
  3. Cat, o arquivo de texto simples: cat ${filename}.plain
  4. (opcionalmente) exclua o arquivo de texto sem formatação: rm ${filename}.plain

No final, você pode ter um script que também passe a senha para o comando vim. Como um script simples, seria:

filename=$1
password=$2

vim -R -c ":set key= | sav ${filename}.plain | q" -- ${filename} <<< $password && cat ${filename}.plain && rm ${filename}.plain

em que o primeiro argumento é o nome do arquivo e o segundo é a senha.

Claro, há várias coisas que você deve ter em mente:

  • Verifique se você não está sobrescrevendo os arquivos existentes que, por acaso, têm o nome ${filename}.plain .
  • A senha aparecerá na linha de comando e será salva no histórico. Se você quiser receber uma senha toda vez, remova a parte <<< $password .
por 28.07.2016 / 11:39