Drucken (entschlüsseln) Sie eine vim-verschlüsselte Datei

10

Ich benutze die -xOption in vim, um eine Datei zu verschlüsseln. Ich lese diese Dateien viel öfter als ich darauf schreibe, daher benutze ich immer cat und erinnere mich dann, dass sie aufgrund der angezeigten Informationen verschlüsselt sind. Dann muss ich vim verwenden, das Passwort eingeben und dann mit :qbeenden.

Gibt es eine Möglichkeit, cat (oder einen anderen Befehl, der natürlich irgendwo mein Passwort übergibt) zu verwenden und nur den Inhalt zu drucken / abzurufen? Oder gibt es vielleicht nur eine vim-Option, die nur den Inhalt druckt, ohne den Editor aufzurufen?

Pablo Matias Gomez
quelle
Es gibt ein mit Vim gebündeltes Shell-Skript, das es so einrichtet, dass es sich ähnlich wie der weniger Pager verhält. Es befindet sich in "$ VIMRUNTIME / macros / less.sh" und verwendet das Skript "$ VIMRUNTIME / macros / less.vim". Siehe :help less. Leider muss zum Beenden immer noch gedrückt werden q(nicht :erforderlich).
8bittree
2
Probieren Sie die Open-Source- Version vimdecrypt aus .
Harrymc

Antworten:

5

Schauen Sie sich die Open-Source- Version vimdecrypt an :

Befehlszeilentool zum Entschlüsseln von mit Vim-Blowfish verschlüsselten Dateien.

Ab Version 7.3 bietet vim eine stark integrierte Blowfish-Verschlüsselung / -Entschlüsselung, die für bestimmte Zwecke bequemer ist als das Filtern durch gnupg. Leider können die resultierenden Dateien nur von vim zurückgelesen werden, was es schwierig macht, sie für die Stapelverarbeitung oder Skripterstellung zu verwenden. Auch die Langlebigkeit verschlüsselter Daten ist ein Problem, wenn ein Programm mit den Abhängigkeiten und der Größe von vim zum Entsperren erforderlich ist.

Vimdecrypt hebt zwei relevante Dateien aus der vim-Quelle, blowfish.c und sha256.c, und verbindet sie mit einem einfachen Befehlszeilentool. Daten werden aus einer Datei gelesen, entschlüsselte Daten werden in stdout geschrieben.

vimdecrypt path_to_data

Das Passwort wird über den GNU-Getpass abgerufen, der die stdin / stdout-Umleitung nicht beeinträchtigt.

Das Konfigurationssystem von Vim ist vollständig entfernt, was möglicherweise die Unterstützung für andere Plattformen als das 32-Bit-i386-Linux, auf dem es entwickelt wurde, unterbrochen hat. Da die beiden relevanten Dateien unverändert aus dem vim-Projekt stammen, sollte es trivial sein, die Unterstützung auf anderen Plattformen durch Korrigieren des vim.h-Headers wiederherzustellen.

harrymc
quelle
Ich habe es versucht, aber es wirft mir "Eingabe sollte eine vim-verschlüsselte Datei sein". Ich denke, dass möglicherweise neuere Versionen oder vim nicht unterstützt werden oder dass es ein Problem mit der in meiner Datei verwendeten Verschlüsselungsmethode ist.
Pablo Matias Gomez
Ich sehe, dass die Magie in diesem Skript deklariert ist magics = None, b'VimCrypt~02!', b'VimCrypt~03!'und ich habe meine Datei überprüft und es beginnt mit VimCrypt~01!:(
Pablo Matias Gomez
VimCrypt 01 ist eher eine PZKIP-Krypta als ein Blowfish / Blowfish2. Könnte etwas Ähnliches erstellen, indem Sie crypt_zip.c aus der vim-Distribution holen und in vimdecrypt.c Unterstützung für das Aufrufen von crypt_zip_init und crypt_zip_encode anstelle der Blowfish-Varianten hinzufügen. Ich bin fast versucht, dies selbst zu tun.
ssnobody
2
Sie verwenden die alte pkzip-basierte Verschlüsselung (die defekt ist, aber aus Kompatibilitätsgründen immer noch die Standardeinstellung ist) und nicht das neue (ab Vim 7.3) Blowfish-basierte System. Ich weiß, dass Blowfish VimCrypt ~ 02 ist und ich nehme an, dass Blowfish2 VimCrypt ~ 03 ist. Sie könnten Ihre Verschlüsselung wie hier beschrieben in den stärkeren Blowfish oder Blowfish2 konvertieren , und dann wird vimdecrypt wahrscheinlich für Sie funktionieren.
Harrymc
@harrymc Danke! es hat perfekt funktioniert. Hier ist dein Kopfgeld.
Pablo Matias Gomez
5

Dies ist keine elegante Lösung - es ist schnell und schmutzig -, aber es funktioniert mit einzelnen Dateien und Sie können es als Shell-Skript verwenden.

Es ist eine Folge von drei Befehlen, die Folgendes ausführen:

  1. Datei in vim öffnen (schreibgeschützter Modus): vim -R
  2. Speichern Sie die Datei im Klartext und beenden Sie: -c ":set key= | sav ${filename}.plain | q
  3. Cat die Klartextdatei: cat ${filename}.plain
  4. (Optional) Löschen Sie die Klartextdatei: rm ${filename}.plain

Am Ende können Sie ein Skript haben, das auch das Passwort an den Befehl vim übergibt. Als einfaches Skript wäre es:

filename=$1
password=$2

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

Dabei ist das erste Argument der Dateiname und das zweite das Passwort.

Natürlich gibt es einige Dinge, die Sie beachten sollten:

  • Stellen Sie sicher, dass Sie keine vorhandenen Dateien überschreiben, die zufällig den Namen haben ${filename}.plain.
  • Das Passwort wird in der Befehlszeile angezeigt und im Verlauf gespeichert. Wenn Sie jedes Mal zur Eingabe eines Kennworts aufgefordert werden möchten, entfernen Sie das <<< $passwordTeil.
Achilleas
quelle