Làm cách nào để mã hóa một tập tin hoặc thư mục trong Linux?


26

Lệnh phổ biến nhất để thực hiện những việc như mã hóa tệp hoặc thư mục trong thiết bị đầu cuối trong Linux là gì?

Câu trả lời:


31

Tôi nghĩ rằng nó sẽ là gpg. Cú pháp cho các tập tin và thư mục khác nhau mặc dù.

Mã hóa

Đối với tệp (đầu ra filename.gpg):

gpg -c filename

Đối với thư mục:

gpg-zip -c -o file.gpg dirname

Giải mã

Đối với tệp (đầu ra filename.gpg):

gpg filename.gpg

Đối với thư mục:

gpg-zip -d file.gpg

Chỉnh sửa: Đã sửa như @ Mk12 chỉ ra lỗi nén / giải nén cho mã hóa / giải mã.


Không phải đó là "Mã hóa" và "Giải mã" sao?
mk12

Không ai nói làm thế nào để mã hóa một thư mục.
chovy

1
@chovy Không phải ở trên nó nói: Đối với thư mục: gpg-zip -c -o file.gpg dirname
celebdor

@celebdor đã bỏ lỡ cái đó. cảm ơn. chỉnh sửa: điều đó không làm việc cho tôi. Tôi nhận được một số đầu ra được mã hóa kỳ lạ khi tôi giải mã tập tin.
chovy

@chovy: Xin lỗi khi nghe điều đó. Tôi có thể xác nhận rằng các thư mục mã hóa và giải mã như được hiển thị ở trên đã hoạt động với tôi, bằng cách sử dụng gpg-zip (GnuPG) 1.4.16 trong Mint 17.
Michael Scheper

10
  • với openssl

openssl des3 -salt -in unencrypted-data.tar -out encrypted-data.tar.des3

Giải mã:

openssl des3 -d -salt -in encrypted-data.tar.des3 -out unencrypted-data.tar

  • mã hóa bằng AES

aescrypt -e -p password file.jpg

Giải mã:

aescrypt -d -p password file.jpg.aes


1
+1 để hiển thị cách thực hiện với openssl, rất có thể có sẵn ngoài hộp.
DevSolar

Thật vậy, nhưng 3DES được coi là không an toàn và không nên được sử dụng, AES (aescrypt) là một lựa chọn tốt hơn nhiều, xem: stackoverflow.com/questions/1619212/
jmng 24/07/18

2

Hãy thử GnuPG .

Để mã hóa: gpg -c filename

Để giải mã: gpg filename.gpg


2

Đây là phương pháp của tôi bằng cách sử dụng openssl và tar

Mở thư mục được mã hóa:

openssl enc -aes-256-cbc -d -in ~/vault.tar.gz.dat | tar xz; thunar ~/vault

Khóa thư mục được mã hóa:

tar cz vault/ | openssl enc -aes-256-cbc -out ~/vault.tar.gz.dat; rm -r ~/vault

1
rm -rkhông xóa dữ liệu; nó chỉ đơn thuần là liên kết nó. Bạn sẽ cần phải sử dụng một cái gì đó như srmđể xóa dữ liệu khỏi đĩa.
jbindel

2

Cá nhân tôi sử dụng aescryptchủ yếu.

      aescrypt -e "File" 

và giải mã:

      aescrypt -d "File"

Hoặc có mcrypt:

      mcrypt "File" 

và giải mã:

      mcrypt -d "File"

Và đối với một thư mục, tôi khuyên bạn nên đọc thư mục và mã hóa nó. Sau đó, sau khi giải mã, chỉ cần gỡ bỏ tệp:

      tar -cf "Dir.tar" Dir/

và để cởi trói

      tar -xf "Dir.tar"

1

Nếu mức bảo mật cao nhất không phải là vấn đề lớn (trang man của zip nói, thuật toán mã hóa được sử dụng bởi các tiện ích zipfile yếu hơn PGP), thì tôi thích zip và giải nén hơn. Nó nén các thư mục của tôi và mã hóa cùng một lúc. Tôi thích zip vì bạn có thể có một loại zip và mã hóa gia tăng thay vì nén và mã hóa lại toàn bộ. Đặc biệt nó rất hữu ích khi kích thước thư mục rất lớn.

ZIP và mã hóa

zip file.zip file
zip -r directory.zip directory
zip --encrypt file.zip.enc file # prompt for password
zip --encrypt -r directory.zip.enc directory # prompt for password

Giải nén và giải mã

unzip directory.zip.enc #Beware if any directory is present with the same name as the zipped file, then it would be overwritten. Hence I normally send the contents to another directory.

unzip directory.zip.enc -d directory-new # prompts for password

0

Có thể không phổ biến nhưng tôi đã làm việc trong một dự án để mã hóa / giải mã mọi thứ với sự tương tác tối thiểu của người dùng thông qua việc sử dụng một vài tập lệnh Bash. Đây là một liên kết đến bài viết Hak5 giải thích thiết lập để thử nghiệm.

Việc cắt giảm các logic của mã nguồn mặc dù đây là những gì xảy ra với từng loại dữ liệu có thể được xử lý bởi dự án được liên kết ở trên

_gnupg_encrypt_opts="--always-trust --armor --batch --encrypt --recipient user@host.domain"
 _bulk_output_dir="some_path"
_arbitrary_parsed_output="some_file.gpg"
## If file make encrypted time stamped file with similar name
_path_to_file="${_mapped_input}"
_path_to_output="${_bulk_output_dir}/$(date -u +%s)_${_path_to_file##*/}.gpg"
cat "${_path_to_file}" | gpg ${gpg _gnupg_encrypt_opts} > "${_path_to_output}"
## else if directory make compressed encrypted time stamped output file
_path_to_dir="${_mapped_input}"
_path_to_output="${_bulk_output_dir}/$(date -u +%s)_dir.tgz.gpg
tar -cz - "${_path_to_dir}" | gpg ${gpg _gnupg_encrypt_opts} > "${_path_to_output}"
## else if something else append encrypted output to file
_path_to_output="${_arbitrary_parsed_output}"
cat <<<"${_mapped_input}" | gpg ${gpg _gnupg_encrypt_opts} >> "${_path_to_output}"

Các ${_mapped_input}biến được đặt bằng cách đọc một mkfifotập tin ống đặt tên và thiết lập bất cứ điều gì để đọc một mảng với mapfile -t _lines < "${_file_to_map}"đó là sau đó mở rộng và lưu vào một ${_mapped_input}... một chút phức tạp nhưng nó cho phép tính năng thử nghiệm để hoạt động trên dây chuyền cá nhân. Kết quả cuối cùng là bạn kết thúc với một thư mục chứa các tệp được mã hóa hoặc các thư mục được nén và một tệp có các gói dữ liệu được mã hóa khác nhau.

Giải mã cho các tập tin hoặc thư mục nén là đủ đơn giản trên một thiết bị có khóa riêng liên quan đến khóa chung được sử dụng để mã hóa. Nhưng việc giải mã nhiều gói dữ liệu được mã hóa áo giáp khó khăn hơn một chút, do đó, có một đoạn script có tên Paranoid_Pipes_Scenario_One.shtrong dự án trên được viết để thực hiện tất cả với sự tương tác tối thiểu của người dùng. Dưới đây là phiên bản đơn giản của mã nguồn của trình trợ giúp cho các tệp và thư mục được mã hóa thông thường.

_gnupg_decrypt_opts="--quiet --no-tty --always-trust --passphrase-fd 9 --decrypt"
_decryption_output_dir="some_directory"
# if file
exec 9<"${_pass[@]}"
_path_to_file="${_mapped_input}"
_output_name="${_path_to_file##*/}"
_output_name="${_output_name%.gpg*}"
cat "${_path_to_file}" | gpg ${_gnupg_decrypt_opts} > "${_decryption_output_dir}/${_output_name}"
# else if compressed file
_path_to_file="${_mapped_input}"
_output_name="${_path_to_file##*/}"
_output_name="${_output_name%.tgz.gpg*}"
mkdir -p "${_decryption_output_dir}/${_output_name}"
_old_pwd="${PWD}"
cd "${_decryption_output_dir}/${_output_name}"
cat "${_path_to_file}" | gpg ${_gnupg_decrypt_opts} | tar -xzf -
cd "${_old_pwd}"
# else if non-compressed directory
_path_to_file="${_mapped_input}"
_output_name="${_path_to_file##*/}"
_output_name="${_output_name%.tar.gpg*}"
mkdir -p "${_decryption_output_dir}/${_output_name}"
_old_pwd="${PWD}"
cd "${_decryption_output_dir}/${_output_name}"
cat "${_path_to_file}" | gpg ${_gnupg_decrypt_opts} | tar -xf -
cd "${_old_pwd}"

Nếu bạn muốn xem các tính năng khác đang hoạt động và được kiểm tra theo cách có thể xác minh công khai, thì hãy xem nhật ký xây dựng Travis-CI (đặc biệt là gần cuối nhật ký) bạn sẽ thấy có một số điều thú vị khác đang được thực hiện liên quan để mã hóa và giải mã gần như mọi dữ liệu.


0

Sử dụng FinalCrypt - Bảng mã hóa thư mục tệp / thư mục một lần không thể phá vỡ (GUI & CLI)

Nó tự tạo các phím Pad một lần

java -cp FinalCrypt.jar rdj/CLUI --encrypt --password-prompt -k My-Key-Directory/ -t My-Test-Directory/

Mật khẩu:

Bắt đầu mã hóa 4 tập tin hoàn toàn 249,7 MiB

🔒 "/home/ron/My-Test-Directory/Video/Eerebegraafplaats.mp4.bit" 🗝 ✔ 🖆 ✔ 🔒✔ ℄✔ 🗑✔ SHA-256: "C1E3F3A3545FEA026F3FB344F3D0798B54820B7F9AD9AAC4BE9FD1E955F947DA" -> "D53FCEADDF542AC3655B547778911F786C2C2BDD327E0618A9E7F77B57792DEA" 58,4% 🔒 "/ home / ron / My-Test-Directory / Video / Castle-waxjo-sweden.mp4.bit "🗝 ✔ 🖆 ✔ 🔒 /home/ron/My-Test-Directory/Brother_HL-2170W-usaeng_quick-setup.pdf.bit" 🗝 ✔ 🖆 ✔ 🔒✔ ℄✔ 🗑✔ SHA-256: "0858D2D5A8CF118D40B517CD4A1F8D31D9F5A21221F75BD764B5E363FC1431FE" -> "266CE42027F891DECF109D7A9DD69E8B42C0E43D35E952BEB89F7C7EA2DBE92C" 95,7% 🔒 "/ home / ron / My-Test-Directory / Brother dsmobile 700d_uke_usr.pdf.bit

Mã hóa xong [4/4] tệp hoàn toàn [249,7 MiB / 249,7 MiB] trong 7,3 giây (trung bình: 34,2 MiB / s)

java -cp FinalCrypt.jar rdj/CLUI --decrypt --password-prompt -k My-Key-Directory/ -t My-Test-Directory/

Mật khẩu:

Bắt đầu giải mã 4 tập tin hoàn toàn 124,9 MiB

"' home / ron / My-Test-Directory / video / Eerebegraafplaats.mp4" 🖃 ✔ 🔓✔ ℄✔ 🗑✔ SHA-256: "D53FCEADDF542AC3655B547778911F786C2C2BDD327E0618A9E7F77B57792DEA" -> "C1E3F3A3545FEA026F3FB344F3D0798B54820B7F9AD9AAC4BE9FD1E955F947DA" 91,2% 🔓 "/ home / ron / My-Test -Directory / Brother dsmobile 700d_uke_usr.pdf "✔ ✔ SH🗑/home/ron/My-Test-Directory/Brother_HL-2170W-usaeng_quick-setup.pdf" 🖃 ✔ 🔓✔ ℄✔ 🗑✔ SHA-256: "266CE42027F891DECF109D7A9DD69E8B42C0E43D35E952BEB89F7C7EA2DBE92C" -> "0858D2D5A8CF118D40B517CD4A1F8D31D9F5A21221F75BD764B5E363FC1431FE" 100,0%

Đã giải mã xong các tệp [4/4] hoàn toàn [124,9 MiB / 124,9 MiB] trong 3,4 giây (trung bình: 36,3 MiB / s)

Nó cũng có GUI

Chỉ cố gắng giúp cộng đồng ...



FinalCrypt 5 đã thêm Khóa tự động và tự động tạo Khóa OTP để cuộc thảo luận mà Scott đang đề cập không còn phù hợp
Ron de Jong

Tôi muốn xem một mô tả về cách thức hoạt động của nó mang tính kỹ thuật cao hơn và ít vẫy tay hơn. Vấn đề là các miếng đệm một lần (1) rất tốt cho việc truyền dữ liệu và tệ hại cho việc  lưu trữ và (2) phải là ngẫu nhiên.  Nếu các OTP của FinalCrypt thực sự ngẫu nhiên, thì chúng phải được lưu trữ, điều này làm tổn hại đến bảo mật. Nếu chúng có thể được tái sinh, thì chúng không phải là ngẫu nhiên, mà chỉ là giả ngẫu nhiên, và do đó chúng không phải là OTP thích hợp. Tiết (Cont'd)
Scott

(Tiếp theo) Trang của họ trên  Quản lý khóa tự động cho biết rằng các OTP được lưu trữ trên một ổ đĩa ngoài (USB) có thể tháo rời. Có thể làm việc tốt. Nhưng, nếu bạn phải gắn ổ USB của mình mỗi lần bạn muốn giải mã tệp của mình (và cho rằng một OTP phải lớn nhất bằng tệp mà nó mã hóa), bạn cũng có thể lưu trữ các tệp của mình trên ổ đĩa di động và không bận tâm với mã hóa. Tiết (Cont'd)
Scott

(Tiếp theo) ... Ngoài ra, trang FinalCrypt chính nói “hầu hết sử dụng phần mềm crypto chia AES ...”, nhưng tuyên bố rằng AES là “bị hỏng” dường như bị chi phối lớn phóng đại. Liên quan: Tại sao AES được coi là an toàn? (trên  Sàn giao dịch tiền điện tử ).
Scott
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.