Распечатать (расшифровать) зашифрованный файл vim

2537
Pablo Matias Gomez

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

Есть ли способ использовать cat (или другую команду, конечно, где-то передавая мой пароль) и просто распечатать / получить содержимое? Или, может быть, есть только опция vim, которая только печатает содержимое без входа в редактор?

9
Есть сценарий оболочки, связанный с Vim, который настраивает его на поведение, аналогичное меньшему количеству пейджеров. Он находится в "$ VIMRUNTIME / macros / less.sh" и использует скрипт "$ VIMRUNTIME / macros / less.vim". Смотрите ": помогите меньше". К сожалению, для выхода по-прежнему требуется нажать клавишу `q` (без`: `). 8bittree 7 лет назад 0
Попробуйте открыть [vimdecrypt] с открытым исходным кодом (https://github.com/gertjanvanzwieten/vimdecrypt). harrymc 7 лет назад 2

2 ответа на вопрос

5
Achilleas

Это не элегантное решение - оно быстрое и грязное - но оно работает с отдельными файлами, и вы можете использовать его как сценарий оболочки.

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

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

В конце вы можете получить скрипт, который также передает пароль команде vim. Как простой скрипт это будет:

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

где первый аргумент - это имя файла, а второй - пароль.

Конечно, есть несколько вещей, которые вы должны иметь в виду:

  • Убедитесь, что вы не перезаписываете существующие файлы, которые имеют имя $.plain.
  • Пароль появится в командной строке и будет сохранен в истории. Если вы хотите каждый раз запрашивать пароль, удалите <<< $passwordдеталь.
3
harrymc

Взгляните на vimdecrypt с открытым исходным кодом :

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

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

Vimdecrypt извлекает два соответствующих файла из исходного кода vim, blowfish.c и sha256.c, и объединяет их в простой инструмент командной строки. Данные читаются из файла, расшифрованные данные записываются на стандартный вывод.

vimdecrypt path_to_data 

Пароль получен через GNU getpass, который не мешает перенаправлению stdin / stdout.

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

Я пробовал это, но это бросает меня "ввод должен быть зашифрованным VIM-файлом". Я думаю, что, возможно, не поддерживает более новые версии или vim, или, возможно, это проблема метода шифрования, используемого в моем файле? Pablo Matias Gomez 7 лет назад 0
Я вижу, что волшебство, объявленное в этом сценарии, является `magics = None, b'VimCrypt ~ 02! ', B'VimCrypt ~ 03!'`, И я проверил мой файл, и он начинается с `VimCrypt ~ 01!` :( Pablo Matias Gomez 7 лет назад 0
VimCrypt 01 - это крипта PZKIP, а не Blowfish / Blowfish2. Можно было создать нечто подобное, взяв crypt_zip.c из дистрибутива vim и добавив поддержку в vimdecrypt.c для вызова crypt_zip_init и crypt_zip_encode вместо вариантов blowfish. Я почти соблазн сделать это сам. ssnobody 7 лет назад 0
Вы используете старое шифрование на основе pkzip (которое не работает, но по-прежнему используется по умолчанию в целях совместимости), а не новую (начиная с Vim 7.3) систему на основе blowfish. Я знаю, что blowfish - это VimCrypt ~ 02, и я полагаю, что blowfish2 - это VimCrypt ~ 03. Вы можете преобразовать свое шифрование в более сильный blowfish или blowfish2, как описано выше (http://vim.wikia.com/wiki/Encryption), и тогда vimdecrypt, вероятно, подойдет вам. harrymc 7 лет назад 2
@harrymc Спасибо! это сработало отлично. Вот ваша награда. Pablo Matias Gomez 7 лет назад 0

Похожие вопросы