Cetak (dekripsi) file yang dienkripsi vim

10

Saya menggunakan -xopsi dalam vim untuk mengenkripsi file. Saya membaca file ini jauh lebih banyak daripada yang saya tulis, jadi saya selalu menggunakan cat dan kemudian mengingatnya terenkripsi karena apa yang ditunjukkannya. Jadi saya harus menggunakan vim, masukkan kata sandi dan kemudian keluar menggunakan :q..

Apakah ada cara untuk menggunakan cat (atau perintah lain, tentu saja melewati kata sandi saya di suatu tempat) dan hanya mencetak / mendapatkan isinya? Atau mungkin hanya ada opsi vim yang hanya mencetak konten tanpa memasukkan editor?

Pablo Matias Gomez
sumber
Ada skrip shell yang dibundel dengan Vim yang mengaturnya untuk berperilaku serupa dengan pager yang kurang. Itu terletak di "$ VIMRUNTIME / macro / less.sh" dan menggunakan skrip "$ VIMRUNTIME / macros / less.vim". Lihat :help less. Sayangnya itu masih membutuhkan penekanan q(tidak :diperlukan) untuk keluar.
8bittree
2
Coba vimdecrypt open-source .
harrymc

Jawaban:

5

Lihatlah vimdecrypt open-source :

Alat baris perintah untuk mendekripsi file yang dienkripsi dengan vim-blowfish.

Pada versi 7.3 vim menawarkan enkripsi / dekripsi blowfish yang dibangun dengan kuat, yang untuk tujuan tertentu lebih nyaman daripada memfilter melalui gnupg. Sayangnya file yang dihasilkan hanya dapat dibaca kembali oleh vim yang membuatnya sulit untuk menggunakannya dalam pemrosesan batch atau skrip. Umur panjang data terenkripsi juga menjadi perhatian jika suatu program dengan dependensi dan ukuran vim diperlukan untuk membukanya.

Vimdecrypt mengangkat dua file yang relevan dari sumber vim, blowfish.c dan sha256.c, dan antarmuka mereka dalam alat baris perintah sederhana. Data dibaca dari file, data yang didekripsi ditulis ke stdout.

vimdecrypt path_to_data

Kata sandi diperoleh melalui GNU getpass yang tidak mengganggu pengalihan stdin / stdout.

Sistem konfigurasi Vim sepenuhnya dilucuti yang mungkin telah merusak dukungan untuk platform lain dari 32 bit i386 linux yang dikembangkannya. Karena dua file yang relevan diambil dari proyek vim yang tidak dimodifikasi, sepele untuk mengembalikan dukungan pada platform lain dengan memperbaiki header vim.h.

harrymc
sumber
Saya telah mencobanya tetapi melempar saya "input harus berupa file yang dienkripsi vim". Saya pikir mungkin tidak mendukung versi yang lebih baru atau vim atau mungkin itu masalah metode enkripsi yang digunakan dalam file saya?
Pablo Matias Gomez
Saya melihat bahwa sihir yang dideklarasikan dalam skrip itu adalah magics = None, b'VimCrypt~02!', b'VimCrypt~03!'dan saya memeriksa file saya dan itu dimulai dengan VimCrypt~01!:(
Pablo Matias Gomez
VimCrypt 01 adalah PZKIP crypt daripada blowfish / blowfish2. Dapat membangun sesuatu yang serupa dengan meraih crypt_zip.c dari vim distro dan menambahkan dukungan di vimdecrypt.c untuk memanggil crypt_zip_init dan crypt_zip_encode alih-alih varian blowfish. Saya HAMPIR tergoda untuk melakukan ini sendiri.
ssnobody
2
Anda menggunakan enkripsi berbasis pkzip lama (yang rusak, tetapi masih default untuk alasan kompatibilitas) dan bukan sistem blowfish baru (per Vim 7.3). Saya tahu bahwa blowfish adalah VimCrypt ~ 02 dan saya kira blowfish2 adalah VimCrypt ~ 03. Anda bisa mengonversi enkripsi Anda menjadi blowfish yang lebih kuat atau blowfish2, seperti dijelaskan di sini , dan kemudian vimdecrypt mungkin akan bekerja untuk Anda.
harrymc
@harrymc Terima kasih! itu bekerja dengan sempurna. Ini hadiahmu.
Pablo Matias Gomez
5

Ini bukan solusi yang elegan --- ini cepat dan kotor --- tetapi ini berfungsi pada file tunggal dan Anda dapat menggunakannya sebagai skrip shell.

Ini adalah urutan dari tiga perintah yang melakukan hal berikut:

  1. Buka file dalam vim (mode hanya baca): vim -R
  2. Simpan file dalam plaintext dan keluar: -c ":set key= | sav ${filename}.plain | q
  3. Cat file plaintext: cat ${filename}.plain
  4. (Secara opsional) hapus file plaintext: rm ${filename}.plain

Pada akhirnya Anda dapat memiliki skrip yang juga meneruskan kata sandi ke perintah vim. Sebagai skrip sederhana akan menjadi:

filename=$1
password=$2

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

di mana argumen pertama adalah nama file dan yang kedua adalah kata sandi.

Tentu saja, ada beberapa hal yang harus Anda ingat:

  • Pastikan Anda tidak menimpa file yang sudah ada yang memiliki nama ${filename}.plain.
  • Kata sandi akan muncul di baris perintah dan disimpan dalam riwayat. Jika Anda ingin dimintai kata sandi setiap kali, hapus <<< $passwordbagian tersebut.
Achilleas
sumber