In (giải mã) một tập tin được mã hóa vim


10

Tôi sử dụng -xtùy chọn trong vim để mã hóa một tập tin. Tôi đọc các tập tin này nhiều lần hơn tôi viết cho nó, vì vậy tôi luôn sử dụng con mèo và sau đó nhớ nó được mã hóa vì những gì nó hiển thị .. Vì vậy, sau đó tôi phải sử dụng vim, nhập mật khẩu và sau đó thoát ra bằng cách sử dụng :q..

Có cách nào để sử dụng cat (hoặc một lệnh khác, tất nhiên là chuyển mật khẩu của tôi ở đâu đó) và chỉ cần in / lấy nội dung không? Hoặc có thể chỉ có một tùy chọn vim chỉ in nội dung mà không cần vào trình chỉnh sửa?


Có một tập lệnh shell được đóng gói với Vim để thiết lập nó hoạt động tương tự như máy nhắn tin ít hơn. Nó nằm trong "$ VIMRUNTIME / macro / less.sh" và sử dụng tập lệnh "$ VIMRUNTIME / macros / less.vim". Xem :help less. Thật không may, nó vẫn yêu cầu nhấn q(không :cần thiết) để thoát.
8bittree

2
Hãy thử vimdecrypt mã nguồn mở .
harrymc

Câu trả lời:


5

Hãy xem vimdecrypt mã nguồn mở :

Công cụ dòng lệnh để giải mã các tập tin được mã hóa vim-blowfish.

Kể từ phiên bản 7.3, vim cung cấp mã hóa / giải mã blowfish tích hợp mạnh mẽ, cho các mục đích nhất định sẽ thuận tiện hơn so với lọc qua gnupg. Thật không may, các tệp kết quả chỉ có thể được đọc lại bởi vim, điều này khiến cho việc sử dụng chúng trong xử lý hàng loạt hoặc tập lệnh trở nên khó khăn. Ngoài ra tuổi thọ của dữ liệu được mã hóa là một mối quan tâm nếu một chương trình có phụ thuộc và kích thước của vim được yêu cầu để mở khóa.

Vimdecrypt nâng hai tệp có liên quan từ nguồn vim, blowfish.c và sha256.c và giao diện chúng trong một công cụ dòng lệnh đơn giản. Dữ liệu được đọc từ một tập tin, dữ liệu được giải mã được ghi vào thiết bị xuất chuẩn.

vimdecrypt path_to_data

Mật khẩu được lấy thông qua GNU getpass không can thiệp vào chuyển hướng stdin / stdout.

Hệ thống cấu hình của Vim bị loại bỏ hoàn toàn, điều này có thể đã phá vỡ sự hỗ trợ cho các nền tảng khác ngoài i386 linux 32 bit mà nó được phát triển trên đó. Vì hai tệp có liên quan được lấy từ dự án vim chưa được sửa đổi, nên việc khôi phục hỗ trợ trên các nền tảng khác bằng cách sửa tiêu đề vim.h là không đáng kể.


Tôi đã thử nó nhưng nó ném cho tôi "đầu vào phải là một tệp được mã hóa vim". Tôi nghĩ rằng có thể không hỗ trợ các phiên bản mới hơn hoặc vim hoặc có thể đó là vấn đề của phương thức mã hóa đang được sử dụng trong tệp của tôi?
Pablo Matias Gomez

Tôi thấy rằng các phép thuật được khai báo trong kịch bản đó magics = None, b'VimCrypt~02!', b'VimCrypt~03!'và tôi đã kiểm tra tệp của mình và nó bắt đầu bằng VimCrypt~01!:(
Pablo Matias Gomez

VimCrypt 01 là mật mã PZKIP chứ không phải là blowfish / blowfish2. Có thể xây dựng một cái gì đó tương tự bằng cách lấy crypt_zip.c từ vim distro và thêm hỗ trợ trong vimdecrypt.c để gọi crypt_zip_init và crypt_zip_encode thay vì các biến thể blowfish. Tôi rất muốn làm điều này bản thân mình.
ssnobody

2
Bạn đang sử dụng mã hóa dựa trên pkzip cũ (đã bị hỏng, nhưng vẫn là mặc định vì lý do tương thích) và không phải là hệ thống dựa trên blowfish mới (kể từ Vim 7.3). Tôi biết rằng blowfish là VimCrypt ~ 02 và tôi cho rằng blowfish2 là VimCrypt ~ 03. Bạn có thể chuyển đổi mã hóa của mình sang blowfish mạnh hơn hoặc blowfish2, như được mô tả ở đây , và sau đó vimdecrypt có thể sẽ hoạt động cho bạn.
harrymc

@harrymc Cảm ơn! nó hoạt động hoàn hảo Đây là tiền thưởng của bạn.
Pablo Matias Gomez

5

Đây không phải là một giải pháp tao nhã --- nó nhanh và bẩn --- nhưng nó hoạt động trên các tệp đơn lẻ và bạn có thể sử dụng nó làm tập lệnh shell.

Đó là một chuỗi gồm ba lệnh thực hiện như sau:

  1. Mở tệp trong vim (chế độ chỉ đọc): vim -R
  2. Lưu tệp trong bản rõ và thoát: -c ":set key= | sav ${filename}.plain | q
  3. Cát tệp văn bản gốc: cat ${filename}.plain
  4. (Tùy chọn) xóa tệp văn bản gốc: rm ${filename}.plain

Cuối cùng, bạn có thể có một tập lệnh cũng truyền mật khẩu cho lệnh vim. Là một kịch bản đơn giản, nó sẽ là:

filename=$1
password=$2

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

trong đó đối số đầu tiên là tên tệp và đối số thứ hai là mật khẩu.

Tất nhiên, có một số điều bạn nên ghi nhớ:

  • Đảm bảo bạn không ghi đè các tệp hiện có có tên ${filename}.plain.
  • Mật khẩu sẽ xuất hiện trên dòng lệnh và được lưu trong lịch sử. Nếu bạn muốn được nhắc nhập mật khẩu mỗi lần, hãy xóa <<< $passwordphần đó.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.