Роздрукуйте (розшифруйте) зашифрований файл vim


10

Я використовую -xопцію vim для шифрування файлу. Я читаю ці файли набагато більше разів, ніж я їм пишу, тому я завжди використовую cat, а потім пам'ятаю, що він зашифрований через те, що він показує .. Тож мені доведеться використовувати vim, ввести пароль, а потім вийти з використанням :q..

Чи є спосіб використовувати cat (або іншу команду, звичайно десь передавши свій пароль) і просто надрукувати / отримати вміст? А може, є лише параметр vim, який друкує вміст лише не входячи в редактор?


Існує сценарій оболонки в комплекті з Vim, який налаштовує його поводитись так само, як і менш пейджер. Він розташований у "$ VIMRUNTIME / macros / less.sh" і використовує сценарій "$ VIMRUNTIME / macros / less.vim". Див :help less. На жаль, для виходу все ще потрібне натискання q(не :потрібно).
8bittree

2
Спробуйте vimdecrypt з відкритим кодом .
harrymc

Відповіді:


5

Погляньте на vimdecrypt з відкритим кодом :

Інструмент командного рядка для розшифрування файлів, зашифрованих vim-blowfish.

Станом на версію 7.3 vim пропонує сильне вбудоване шифрування / дешифрування мухомор, що для певних цілей зручніше, ніж фільтрування через gnupg. На жаль, отримані файли можна прочитати лише за допомогою vim, що ускладнює їх використання в пакетній обробці або сценаріях. Також тривалість зашифрованих даних викликає занепокоєння, якщо для її розблокування потрібна програма із залежностями та розміром vim.

Vimdecrypt піднімає два відповідні файли з джерела vim, blowfish.c та sha256.c, та інтерфейсує їх у простому інструменті командного рядка. Дані читаються з файлу, розшифровані дані записуються в stdout.

vimdecrypt path_to_data

Пароль отримується через GNU-passpass, який не заважає перенаправленню stdin / stdout.

Система налаштування Vim повністю позбавлена, що, можливо, порушило підтримку інших платформ, ніж 32-бітний i386 linux, на якому він був розроблений. Оскільки два релевантні файли взяті з проекту vim немодифіковані, слід відновити підтримку на інших платформах шляхом фіксації заголовка vim.h.


Я спробував це, але це кидає мені "вхід повинен бути зашифрований vim-файл". Я думаю, що, можливо, не підтримує новіші версії чи vim, або, можливо, це проблема методу шифрування, який використовується у моєму файлі?
Пабло Матіас Гомес

Я бачу, що в цьому сценарії є магія, magics = None, b'VimCrypt~02!', b'VimCrypt~03!'і я перевірив свій файл, і він починається з VimCrypt~01!:(
Пабло Матіас Гомес,

VimCrypt 01 - це крипта PZKIP, а не метелик / міхур2. Можна створити щось подібне, схопивши crypt_zip.c з vim distro та додавши підтримку в vimdecrypt.c для виклику crypt_zip_init та crypt_zip_encode замість варіантів "муха". Я СПАСИЛО спокусився зробити це сам.
ssnobody

2
Ви використовуєте старе шифрування на основі pkzip (яке порушено, але все ж за замовчуванням з міркувань сумісності), а не нову (на Vim 7.3) систему, що базується на морі. Я знаю, що Blowfish - це VimCrypt ~ 02, і я вважаю, що blowfish2 є VimCrypt ~ 03. Ви можете перетворити своє шифрування на більш сильну зміну або blowfish2, як описано тут , і тоді vimdecrypt, ймовірно, допоможе вам.
harrymc

@harrymc Дякую! це працювало чудово. Ось ваша винагорода.
Пабло Матіас Гомес

5

Це не елегантне рішення - це швидко і брудно --- але воно працює на окремих файлах, і ви можете використовувати його як сценарій оболонки.

Це послідовність з трьох команд, які виконують наступне:

  1. Відкрити файл у vim (режим лише для читання): vim -R
  2. Збережіть файл у простому тексті та закрийте: -c ":set key= | sav ${filename}.plain | q
  3. Кіт файлу в простому тексті: cat ${filename}.plain
  4. (Необов’язково) видалити файл простого тексту: rm ${filename}.plain

Зрештою, у вас може бути сценарій, який також передає пароль команді vim. Як простий сценарій це було б:

filename=$1
password=$2

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

де перший аргумент - це ім'я файлу, а другий - пароль.

Звичайно, слід пам’ятати про кілька речей:

  • Переконайтеся, що ви не перезаписуєте існуючі файли, які, начебто, мають ім'я ${filename}.plain.
  • Пароль з’явиться в командному рядку і буде збережений в історії. Якщо ви хочете кожен раз запитувати пароль, видаліть <<< $passwordчастину.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.