Wydrukuj (odszyfruj) zaszyfrowany plik vim

10

Korzystam z -xopcji w vimie do szyfrowania pliku. Czytam te pliki wiele razy, niż do nich piszę, więc zawsze używam cat, a potem pamiętam, że jest zaszyfrowany z powodu tego, co pokazuje. Więc muszę użyć vima, wprowadzić hasło, a następnie wyjść używając :q...

Czy jest jakiś sposób, aby użyć cat (lub innego polecenia, oczywiście gdzieś przekazując moje hasło) i po prostu wydrukować / pobrać zawartość? A może jest tylko opcja vim, która drukuje zawartość tylko bez wchodzenia do edytora?

Pablo Matias Gomez
źródło
W pakiecie z Vimem znajduje się skrypt powłoki, który ustawia go tak, aby zachowywał się podobnie do mniej pagera. Znajduje się w „$ VIMRUNTIME / macros / less.sh” i wykorzystuje skrypt „$ VIMRUNTIME / macros / less.vim”. Zobaczyć :help less. Niestety nadal wymaga naciśnięcia q(nie :potrzebne), aby wyjść.
8bittree
2
Wypróbuj vimdecrypt typu open source .
harrymc

Odpowiedzi:

5

Spójrz na vimdecrypt open-source :

Narzędzie wiersza poleceń do odszyfrowywania plików zaszyfrowanych przez vim-blowfish.

Począwszy od wersji 7.3, vim oferuje silne wbudowane szyfrowanie / deszyfrowanie blowfish, co dla niektórych celów jest wygodniejsze niż filtrowanie przez gnupg. Niestety powstałe pliki mogą być odczytane tylko przez vima, co utrudnia wykorzystanie ich w przetwarzaniu wsadowym lub skryptach. Długowieczność zaszyfrowanych danych jest problemem, jeśli do odblokowania wymagany jest program z zależnościami i rozmiarem vima.

Vimdecrypt usuwa dwa odpowiednie pliki ze źródła vim, blowfish.c i sha256.c, i łączy je w prostym narzędziu wiersza poleceń. Dane są odczytywane z pliku, odszyfrowane dane są zapisywane na standardowe wyjście.

vimdecrypt path_to_data

Hasło jest uzyskiwane przez GNU getpass, który nie zakłóca przekierowania stdin / stdout.

System konfiguracyjny Vima jest całkowicie usunięty, co mogło zepsuć obsługę innych platform niż 32-bitowy Linux i386, na którym został opracowany. Ponieważ dwa odpowiednie pliki zostały pobrane z niezmodyfikowanego projektu vim, przywrócenie wsparcia na innych platformach przez ustalenie nagłówka vim.h powinno być trywialne.

harrymc
źródło
Próbowałem, ale rzuca mi się „wejście powinno być plikiem zaszyfrowanym vim”. Myślę, że może nie obsługuje nowszych wersji lub vima, a może jest to problem z metodą szyfrowania używaną w moim pliku?
Pablo Matias Gomez
Widzę, że magia zadeklarowana w tym skrypcie jest magics = None, b'VimCrypt~02!', b'VimCrypt~03!', sprawdziłem plik i zaczyna się on od VimCrypt~01!:(
Pablo Matias Gomez
VimCrypt 01 jest kryptą PZKIP, a nie blowfish / blowfish2. Można zbudować coś podobnego, pobierając plik crypt_zip.c z dystrybucji vim i dodając obsługę vimdecrypt.c do wywoływania crypt_zip_init i crypt_zip_encode zamiast wariantów blowfish. Prawie kusi mnie to zrobić.
ssnobody
2
Używasz starego szyfrowania opartego na pkzip (który jest zepsuty, ale nadal domyślny ze względu na kompatybilność), a nie nowego (opartego na Vimie 7.3) systemu opartego na blowfish. Wiem, że blowfish to VimCrypt ~ 02 i przypuszczam, że blowfish2 to VimCrypt ~ 03. Możesz przekonwertować swoje szyfrowanie na silniejszą blowfish lub blowfish2, jak opisano tutaj , a wtedy vimdecrypt prawdopodobnie będzie dla ciebie działać.
harrymc
@harrymc Thanks! działało idealnie. Oto twoja nagroda.
Pablo Matias Gomez
5

To nie jest eleganckie rozwiązanie --- jest szybkie i brudne --- ale działa na pojedynczych plikach i można go użyć jako skryptu powłoki.

Jest to sekwencja trzech poleceń, które wykonują następujące czynności:

  1. Otwórz plik w vimie (tryb tylko do odczytu): vim -R
  2. Zapisz plik jako zwykły tekst i wyjdź: -c ":set key= | sav ${filename}.plain | q
  3. Cat plik w postaci zwykłego tekstu: cat ${filename}.plain
  4. (Opcjonalnie) usuń plik zwykłego tekstu: rm ${filename}.plain

Na koniec możesz mieć skrypt, który również przekazuje hasło do komendy vim. Jako prosty skrypt byłby to:

filename=$1
password=$2

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

gdzie pierwszy argument to nazwa pliku, a drugi to hasło.

Oczywiście jest kilka rzeczy, o których należy pamiętać:

  • Upewnij się, że nie zastępujesz istniejących plików, które mają nazwę ${filename}.plain.
  • Hasło pojawi się w wierszu poleceń i zostanie zapisane w historii. Jeśli chcesz otrzymywać monit o hasło za każdym razem, usuń <<< $passwordczęść.
Achilleas
źródło