Imprimer (décrypter) un fichier crypté vim

10

J'utilise l' -xoption dans vim pour crypter un fichier. Je lis ces fichiers beaucoup plus de fois que je n'y écris, donc j'utilise toujours cat et je me souviens ensuite qu'il est crypté à cause de ce qu'il montre :q.

Existe-t-il un moyen d'utiliser cat (ou une autre commande, bien sûr en passant mon mot de passe quelque part) et simplement imprimer / obtenir le contenu? Ou peut-être existe-t-il simplement une option vim qui imprime uniquement le contenu sans entrer dans l'éditeur?

Pablo Matias Gomez
la source
Il y a un script shell fourni avec Vim qui le configure pour se comporter de manière similaire au pageur less. Il se trouve dans "$ VIMRUNTIME / macros / less.sh" et utilise le script "$ VIMRUNTIME / macros / less.vim". Tu vois :help less. Malheureusement, il faut toujours appuyer sur q(pas :nécessaire) pour quitter.
8bittree du
2
Essayez le vimdecrypt open source .
harrymc

Réponses:

5

Jetez un œil à vimdecrypt open source :

Outil en ligne de commande pour décrypter les fichiers cryptés vim-blowfish.

Depuis la version 7.3, vim propose un cryptage / décryptage Blowfish intégré, ce qui est plus pratique à certaines fins que le filtrage via gnupg. Malheureusement, les fichiers résultants ne peuvent être relus que par vim, ce qui rend difficile leur utilisation dans le traitement par lots ou les scripts. La longévité des données chiffrées est également un problème si un programme avec les dépendances et la taille de vim est nécessaire pour le déverrouiller.

Vimdecrypt lève deux fichiers pertinents de la source vim, blowfish.c et sha256.c, et les interface dans un simple outil en ligne de commande. Les données sont lues à partir d'un fichier, les données déchiffrées sont écrites sur stdout.

vimdecrypt path_to_data

Le mot de passe est obtenu via GNU getpass qui n'interfère pas avec la redirection stdin / stdout.

Le système de configuration de Vim est entièrement supprimé, ce qui pourrait avoir interrompu la prise en charge d'autres plates-formes que le linux i386 32 bits sur lequel il a été développé. Étant donné que les deux fichiers pertinents sont extraits du projet vim non modifiés, il devrait être trivial de restaurer la prise en charge sur d'autres plates-formes en corrigeant l'en-tête vim.h.

harrymc
la source
Je l'ai essayé mais il me lance "l'entrée devrait être un fichier crypté vim". Je pense que peut-être ne prend pas en charge les versions plus récentes ou vim ou peut-être que c'est un problème de la méthode de cryptage utilisée dans mon fichier?
Pablo Matias Gomez
Je vois que les magies déclarées dans ce script sont magics = None, b'VimCrypt~02!', b'VimCrypt~03!'et j'ai vérifié mon fichier et ça commence par VimCrypt~01!:(
Pablo Matias Gomez
VimCrypt 01 est une crypte PZKIP plutôt que Blowfish / Blowfish2. Pourrait créer quelque chose de similaire en saisissant crypt_zip.c à partir de la distribution vim et en ajoutant la prise en charge dans vimdecrypt.c pour appeler crypt_zip_init et crypt_zip_encode au lieu des variantes Blowfish. Je suis presque tenté de le faire moi-même.
ssnobody
2
Vous utilisez l'ancien cryptage basé sur pkzip (qui est cassé, mais toujours celui par défaut pour des raisons de compatibilité) et non le nouveau système basé sur Blowfish (à partir de Vim 7.3). Je sais que Blowfish est VimCrypt ~ 02 et je suppose que Blowfish2 est VimCrypt ~ 03. Vous pouvez convertir votre cryptage en Blowfish ou Blowfish2, comme décrit ici , puis vimdecrypt fonctionnera probablement pour vous.
harrymc
@harrymc Merci! cela a parfaitement fonctionné. Voici votre prime.
Pablo Matias Gomez
5

Ce n'est pas une solution élégante --- elle est rapide et sale --- mais elle fonctionne sur des fichiers uniques et vous pouvez l'utiliser comme script shell.

Il s'agit d'une séquence de trois commandes qui effectuent les opérations suivantes:

  1. Ouvrir un fichier dans vim (mode lecture seule): vim -R
  2. Enregistrez le fichier en texte clair et quittez: -c ":set key= | sav ${filename}.plain | q
  3. Cat le fichier en clair: cat ${filename}.plain
  4. (Facultativement) supprimez le fichier en clair: rm ${filename}.plain

À la fin, vous pouvez avoir un script qui transmet également le mot de passe à la commande vim. En tant que script simple, ce serait:

filename=$1
password=$2

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

où le premier argument est le nom de fichier et le second est le mot de passe.

Bien sûr, il y a plusieurs choses que vous devez garder à l'esprit:

  • Assurez-vous de ne pas écraser les fichiers existants qui portent le nom ${filename}.plain.
  • Le mot de passe apparaîtra sur la ligne de commande et sera enregistré dans l'historique. Si vous souhaitez être invité à saisir un mot de passe à chaque fois, retirez la <<< $passwordpièce.
Achilleas
la source