Imprima (descifre) un archivo encriptado vim

10

Yo uso la -xopción en vim para cifrar un archivo. Leo estos archivos muchas veces más de lo que escribo, así que siempre uso cat y luego recuerdo que está encriptado por lo que muestra ... Entonces, tengo que usar vim, ingresar la contraseña y luego salir usando :q...

¿Hay alguna forma de usar cat (u otro comando, por supuesto, pasar mi contraseña a alguna parte) e imprimir / obtener el contenido? ¿O tal vez solo hay una opción vim que solo imprime el contenido sin ingresar al editor?

Pablo Matias Gomez
fuente
Hay un script de shell incluido con Vim que lo configura para comportarse de manera similar al buscapersonas menos. Se encuentra en "$ VIMRUNTIME / macros / less.sh" y utiliza el script "$ VIMRUNTIME / macros / less.vim". Ver :help less. Desafortunadamente, todavía requiere presionar q(no es :necesario) para salir.
8bittree
2
Prueba el código abierto vimdecrypt .
harrymc

Respuestas:

5

Echa un vistazo a la vimdecrypt de código abierto :

Herramienta de línea de comando para descifrar archivos cifrados con vim-blowfish.

A partir de la versión 7.3, vim ofrece un fuerte cifrado / descifrado integrado de blowfish, que para ciertos fines es más conveniente que filtrar a través de gnupg. Desafortunadamente, los archivos resultantes solo pueden ser leídos por vim, lo que hace que sea difícil usarlos en el procesamiento por lotes o scripting. También la longevidad de los datos cifrados es una preocupación si se requiere un programa con las dependencias y el tamaño de vim para desbloquearlo.

Vimdecrypt levanta dos archivos relevantes de la fuente vim, blowfish.c y sha256.c, y los conecta en una sencilla herramienta de línea de comandos. Los datos se leen de un archivo, los datos descifrados se escriben en stdout.

vimdecrypt path_to_data

La contraseña se obtiene a través de GNU getpass que no interfiere con la redirección stdin / stdout.

El sistema de configuración de Vim está completamente eliminado, lo que podría haber roto el soporte para otras plataformas que no sean el i386 linux de 32 bits en el que se desarrolló. Dado que los dos archivos relevantes se toman del proyecto vim sin modificar, debería ser trivial restaurar el soporte en otras plataformas arreglando el encabezado vim.h.

harrymc
fuente
Lo he intentado pero me arroja "la entrada debe ser un archivo cifrado con vim". Creo que tal vez no sea compatible con las versiones más recientes o vim o tal vez sea un problema del método de cifrado que se utiliza en mi archivo.
Pablo Matias Gomez
Veo que las magias declaradas en ese script son magics = None, b'VimCrypt~02!', b'VimCrypt~03!'y revisé mi archivo y comienza con VimCrypt~01!:(
Pablo Matias Gomez
VimCrypt 01 es la cripta PZKIP en lugar de blowfish / blowfish2. Podría construir algo similar al tomar crypt_zip.c de vim distro y agregar soporte en vimdecrypt.c para llamar a crypt_zip_init y crypt_zip_encode en lugar de las variantes de blowfish. Casi estoy tentado de hacer esto yo mismo.
ssnobody
2
Está utilizando el antiguo cifrado basado en pkzip (que está roto, pero sigue siendo el predeterminado por razones de compatibilidad) y no el nuevo sistema basado en blowfish (a partir de Vim 7.3). Sé que blowfish es VimCrypt ~ 02 y supongo que blowfish2 es VimCrypt ~ 03. Puede convertir su cifrado en el blowfish más fuerte o blowfish2, como se describe aquí , y luego vimdecrypt probablemente funcionará para usted.
harrymc
@harrymc ¡Gracias! Funcionó perfectamente. Aquí está tu recompensa.
Pablo Matias Gomez
5

Esta no es una solución elegante, es rápida y sucia, pero funciona en archivos individuales y puede usarla como un script de shell.

Es una secuencia de tres comandos que realizan lo siguiente:

  1. Abrir archivo en vim (modo de solo lectura): vim -R
  2. Guarde el archivo en texto sin formato y salga: -c ":set key= | sav ${filename}.plain | q
  3. Cat el archivo de texto sin formato: cat ${filename}.plain
  4. (Opcionalmente) elimine el archivo de texto sin formato: rm ${filename}.plain

Al final, puede tener un script que también pasa la contraseña al comando vim. Como un simple script sería:

filename=$1
password=$2

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

donde el primer argumento es el nombre del archivo y el segundo es la contraseña.

Por supuesto, hay varias cosas que debe tener en cuenta:

  • Asegúrese de no sobrescribir los archivos existentes que tengan el nombre ${filename}.plain.
  • La contraseña aparecerá en la línea de comando y se guardará en el historial. Si desea que se le solicite una contraseña cada vez, elimine la <<< $passwordpieza.
Achilleas
fuente