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

10

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

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

Пабло Матиас Гомес
источник
Есть сценарий оболочки, связанный с Vim, который настраивает его на поведение, аналогичное меньшему количеству пейджеров. Он находится в «$ VIMRUNTIME / macros / less.sh» и использует скрипт «$ VIMRUNTIME / macros / less.vim». См :help less. К сожалению, это все еще требует нажатия q(не :нужно), чтобы выйти.
бит /
2
Попробуйте vimdecrypt с открытым исходным кодом .
harrymc

Ответы:

5

Посмотрите на 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-разрядной версии Linux i386, на которой она была разработана. Поскольку два соответствующих файла взяты из проекта vim без изменений, восстановление поддержки на других платформах должно быть тривиальным путем исправления заголовка vim.h.

harrymc
источник
Я пробовал это, но он выбрасывает меня "вход должен быть VIM-зашифрованный файл". Я думаю, что, возможно, не поддерживает более новые версии или vim, или это проблема метода шифрования, используемого в моем файле?
Пабло Матиас Гомес
Я вижу магию, объявленную в этом сценарии, magics = None, b'VimCrypt~02!', b'VimCrypt~03!'и я проверил свой файл, и он начинается с VimCrypt~01!:(
Пабло Матиас Гомес,
VimCrypt 01 - это крипта PZKIP, а не blowfish / blowfish2. Можно создать нечто похожее, взяв crypt_zip.c из дистрибутива vim и добавив поддержку в vimdecrypt.c для вызова crypt_zip_init и crypt_zip_encode вместо вариантов blowfish. Я почти соблазн сделать это сам.
ssnobody
2
Вы используете старое шифрование на основе pkzip (которое не работает, но все еще используется по умолчанию из соображений совместимости), а не новую (начиная с Vim 7.3) систему на основе blowfish. Я знаю, что blowfish - это VimCrypt ~ 02, и я полагаю, что blowfish2 - это VimCrypt ~ 03. Вы можете преобразовать свое шифрование в более сильный blowfish или 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деталь.
Ахиллеас
источник