Imprimir (descriptografar) um arquivo criptografado vim


10

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

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


Há um script de shell incluído no Vim que o configura para se comportar de maneira semelhante ao menos pager. Ele está localizado em "$ VIMRUNTIME / macros / less.sh" e usa o script "$ VIMRUNTIME / macros / less.vim". Veja :help less. Infelizmente, ainda é necessário pressionar q(não é :necessário) para sair.
8bittree

2
Experimente o vimdecrypt de código aberto .
harrymc

Respostas:


5

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

Ferramenta de linha de comando para descriptografar arquivos criptografados por vim-blowfish.

A partir da versão 7.3, o vim oferece forte criptografia / descriptografia de blowfish, o que para certos fins é mais conveniente do que filtrar através do gnupg. Infelizmente, os arquivos resultantes só podem ser lidos pelo vim, o que dificulta sua utilização no processamento ou script em lote. Também a longevidade dos dados criptografados é uma preocupação se um programa com as dependências e o tamanho do vim for necessário para desbloqueá-lo.

O Vimdecrypt levanta dois arquivos relevantes da fonte do vim, blowfish.ce sha256.c, e os interage com uma simples ferramenta de linha de comando. Os dados são lidos de um arquivo, os dados descriptografados são gravados no stdout.

vimdecrypt path_to_data

A senha é obtida através do GNU getpass, que não interfere no redirecionamento stdin / stdout.

O sistema de configuração do Vim é totalmente despojado, o que pode ter quebrado o suporte para outras plataformas além do i386 linux de 32 bits em que foi desenvolvido. Como os dois arquivos relevantes são retirados do projeto vim sem modificação, deve ser trivial restaurar o suporte em outras plataformas, corrigindo o cabeçalho vim.h.


Eu tentei, mas isso me mostra que "a entrada deve ser um arquivo criptografado pelo vim". Eu acho que talvez não suporte versões mais recentes ou vim ou talvez seja um problema do método de criptografia sendo usado no meu arquivo?
Pablo Matias Gomez

Vejo que as magias declarados em que o script está magics = None, b'VimCrypt~02!', b'VimCrypt~03!'e eu verifiquei meu arquivo e ele começa com VimCrypt~01!:(
Pablo Matias Gomez

O VimCrypt 01 é uma cripta PZKIP em vez de blowfish / blowfish2. Poderia criar algo semelhante, pegando o crypt_zip.c da vim distro e adicionando suporte no vimdecrypt.c para chamar crypt_zip_init e crypt_zip_encode em vez das variantes blowfish. Estou quase tentado a fazer isso sozinho.
Ssnobody

2
Você está usando a criptografia antiga baseada em pkzip (que está quebrada, mas ainda é o padrão por motivos de compatibilidade) e não o novo sistema baseado em blowfish (como no Vim 7.3). Eu sei que blowfish é VimCrypt ~ 02 e suponho que blowfish2 seja VimCrypt ~ 03. Você pode converter sua criptografia em blowfish ou blowfish2 mais forte, conforme descrito aqui , e o vimdecrypt provavelmente funcionará para você.
harrymc 29/07

@harrymc Thanks! funcionou perfeitamente. Aqui está sua recompensa.
Pablo Matias Gomez

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. Abra o 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 sem formatação: 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 passa 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

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

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

  • Verifique se você não está substituindo os arquivos existentes que possuem o nome ${filename}.plain.
  • A senha aparecerá na linha de comando e será salva no histórico. Se você deseja sempre solicitar uma senha, remova a <<< $passwordpeça.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.