Drucken (entschlüsseln) einer vim-verschlüsselten Datei

2656
Pablo Matias Gomez

Ich benutze die -xOption in vim, um eine Datei zu verschlüsseln. Ich lese diese Dateien viel öfter als ich schreibe, also verwende ich immer cat und erinnere mich dann, dass sie verschlüsselt ist, was sie zeigt. Also muss ich vim verwenden, das Passwort eingeben und dann beenden :q.

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

9
Es gibt ein mit Vim gebündeltes Shellskript, mit dem es sich ähnlich verhält wie der Pager mit weniger. Es befindet sich in "$ VIMRUNTIME / macros / less.sh" und verwendet das Skript "$ VIMRUNTIME / macros / less.vim". Siehe ": help less". Leider muss zum Beenden noch 'q' (kein `:`) gedrückt werden. 8bittree vor 8 Jahren 0
Versuchen Sie es mit Open Source [vimdecrypt] (https://github.com/gertjanvanzwieten/vimdecrypt). harrymc vor 8 Jahren 2

2 Antworten auf die Frage

5
Achilleas

Dies ist keine elegante Lösung - es ist schnell und schmutzig -, aber es funktioniert für einzelne Dateien und Sie können es als Shellskript verwenden.

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

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

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

filename=$1 password=$2  vim -R -c ":set key= | sav $.plain | q" -- $ <<< $password && cat $.plain && rm $.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 den Namen haben $.plain.
  • Das Passwort wird in der Befehlszeile angezeigt und im Verlauf gespeichert. Wenn Sie jedes Mal zur Eingabe eines Kennworts aufgefordert werden sollen, entfernen Sie das <<< $passwordTeil.
3
harrymc

Schauen Sie sich das Open Source Vimdecrypt an :

Befehlszeilentool zum Entschlüsseln von mit vim-blowfish verschlüsselten Dateien.

Ab Version 7.3 bietet vim eine starke eingebaute Blowfish-Verschlüsselung / -Entschlüsselung, die für bestimmte Zwecke praktischer ist als das Filtern durch gnupg. Leider können die resultierenden Dateien nur von vim zurückgelesen werden, was die Verwendung in der Stapelverarbeitung oder Skripting erschwert. Die Langlebigkeit verschlüsselter Daten ist auch ein Problem, wenn ein Programm mit den Abhängigkeiten und der Größe von vim zum Entsperren erforderlich ist.

Vimdecrypt holt 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 GNU getpass erhalten, was die stdin / stdout-Umleitung nicht stört.

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

Ich habe es versucht, aber es wirft mich "Eingabe sollte eine vim-verschlüsselte Datei sein". Ich denke, dass neuere Versionen oder vim möglicherweise nicht unterstützt werden oder vielleicht ein Problem der Verschlüsselungsmethode, die in meiner Datei verwendet wird? Pablo Matias Gomez vor 8 Jahren 0
Ich sehe, dass die in diesem Skript deklarierten Magiken `magics = None, b'VimCrypt ~ 02! ', B'VimCrypt ~ 03!' 'Sind. Ich habe meine Datei überprüft und es beginnt mit` VimCrypt ~ 01! `:( Pablo Matias Gomez vor 8 Jahren 0
VimCrypt 01 ist eine PZKIP-Krypta und nicht Blowfish / Blowfish2. Etwas Ähnliches könnte erstellt werden, indem crypt_zip.c von vim distro übernommen und in vimdecrypt.c Unterstützung für den Aufruf von crypt_zip_init und crypt_zip_encode anstelle der Blowfish-Varianten hinzugefügt wird. Ich bin fast versucht, dies selbst zu tun. ssnobody vor 8 Jahren 0
Sie verwenden die alte, auf pkzip basierende Verschlüsselung (die jedoch aus Kompatibilitätsgründen immer noch als Standard verwendet wird) und nicht das neue (ab Vim 7.3) auf Blowfish basierende System. Ich weiß, dass Blowfish VimCrypt ~ 02 ist, und ich nehme an, dass Blowfish2 VimCrypt ~ 03 ist. Sie können Ihre Verschlüsselung in den stärkeren Blowfish oder Blowfish2 umwandeln, wie [hier beschrieben] (http://vim.wikia.com/wiki/Encryption). Vimdecrypt funktioniert dann wahrscheinlich für Sie. harrymc vor 8 Jahren 2
@Harrymc Danke! es hat perfekt funktioniert. Hier ist deine Prämie. Pablo Matias Gomez vor 8 Jahren 0