Mã hóa nhiều tệp cùng một lúc


10

Tôi đang viết một kịch bản tạo lưu trữ dự án và sau đó tạo 7z lưu trữ chúng để giúp tôi dễ dàng lưu các phiên bản cụ thể và giữ các bản sao lưu được mã hóa.

Sau khi tôi tạo tài liệu lưu trữ và tôi chuyển sang giai đoạn mã hóa, tôi muốn mã hóa các tệp bằng một cuộc gọi gpgnếu có thể, để chỉ người dùng nhập cụm mật khẩu của họ một lần. Mặt khác, chúng ta sẽ phải lưu trữ cụm mật khẩu của người dùng trong bộ nhớ (điều mà tôi thực sự không muốn làm) hoặc cho họ nhập và xác nhận cụm mật khẩu của họ cho mỗi dự án được lưu trữ (tệ hơn).

Có cách nào để vượt qua nhiều tên tệp để gpgmã hóa tất cả chúng trong một lần không?

Nếu tôi thử điều này:

$ gpg --cipher-algo AES256 --compression-algo BZIP2 -c project1.7z project2.7z

... Tôi thấy lỗi sau trong trình bao:

usage: gpg [options] --symmetric [filename]

Có cách nào để làm những gì tôi đang tìm kiếm để hoàn thành?


2
Tại sao trước tiên bạn sử dụng 7zip (có lẽ là) để nén, sau đó báo cho GnuPG nén lại bằng bzip2? Tôi không thấy rằng mang lại cho bạn nhiều về hiệu quả không gian và tôi thấy nó tiêu tốn rất nhiều CPU.
một CVn

1
> Có cách nào để chuyển nhiều tên tệp cho gpg để mã hóa> tất cả chúng trong một lần không? Vâng, hãy thử câu trả lời này
Anchan

Câu trả lời:


5
Is there a way to pass multiple filenames to gpg to have it encrypt all of
them in one go?

Không có.

Bạn có thể muốn chuyển cụm mật khẩu với một trong các tùy chọn gpg sau (lựa chọn sau sẽ là lựa chọn an toàn nhất):

--passphrase
--passphrase-file
--passphrase-fd

10

Vì GnuPG không hỗ trợ điều này trực tiếp, nên cách để làm điều này sẽ là thêm một lớp khác, ví dụ như sử dụng tar.

tar c project1.7z project2.7z | gpg --cipher-algo AES256 --compression-algo BZIP2 -co projects.gpg

Và để giải nén:

gpg -d projects.gpg | tar x

Bạn sẽ bị bỏ lại với project1.7zproject2.7z. Kịch bản của bạn sau đó có thể chọn nơi bạn rời đi.


3

Nếu bạn muốn thử một cái gì đó khác thì GPG có các phương thức sao lưu khác để mã hóa nhiều tệp:

nguồn gốc: http://www.obsd.hu/docs/Unix-backup-with-aes.txt

vi ~/.bashrc

backup() {
if [[ "$1" = "" ]]; then echo 'specify full path' && exit 1; fi
CURRENTDATE="`date +%F-%Hh`"
echo 'Did you do a screenshot of the Desktop and backup all the Bookmarks of the webbrowser and backup cronjobs, etc...?'
read
echo "START: `date`"
ORIGDIR="$1"; ORIGDIRNORM="`echo $ORIGDIR | sed 's/\/$//g'`"; tar cvf - "${ORIGDIRNORM}/" 2>/dev/null | gzip -9 - 2>/dev/null | openssl aes-256-cbc -salt -out "${ORIGDIRNORM}-backup-${CURRENTDATE}.tar.gz.aes" && cksum "${ORIGDIRNORM}-backup-${CURRENTDATE}.tar.gz.aes" >> checksum.txt
echo "END: `date`"
}

decrypt() {
if [[ "$1" = "" ]]; then echo 'specify full path' && exit 1; fi
CURRENTDATE="`date +%F-%Hh`"
echo 'This will decrypt the backup in the current working directory, are you sure?'
read
echo "START: `date`"
ORIGDIR="$1"
openssl aes-256-cbc -d -salt -in "${ORIGDIR}" | tar -xz -f -
echo "END: `date`"
}

Cách sử dụng: chỉ cần sử dụng "sao lưu TRỰC TIẾP" để mã hóa và "giải mã DIRECTORY.tar.gz.aes"


1

Đã quản lý để làm một cái gì đó như thế này, ngày hôm nay:

  1. Thư mục đã thay đổi thành thư mục chứa các tệp đích và chạy tập lệnh Bash để tìm tệp_names cần thiết và liệt kê chúng vào tệp văn bản mà tôi đã gọi found.txt.

  2. Chạy một tập lệnh Bash yêu cầu gpg2 đọc từng tên tệp trong một vòng lặp và vào một biến bộ nhớ và trong cùng một vòng lặp để mã hóa nó bằng khóa ký của tôi và chỉ định rằng đó là để tự đọc. gpg2 tạo ra một cửa sổ bật lên để đặt cụm từ mật khẩu của bạn, cửa sổ bật lên có một hộp kiểm nhỏ nơi bạn có thể chọn giữ cụm từ mật khẩu của mình hoạt động cho phiên. Thực tiễn tồi, nhưng không tệ lắm nếu bạn không ở trên Net và bạn tắt điện ngay sau phiên mã hóa.

  3. Vấn đề duy nhất là đã có ay / n được xử lý. Vì vậy, ngồi với ngón tay của tôi trên phím Y và mã hóa 51 tệp nos trong vòng chưa đầy một phút.


Các kịch bản được đưa ra dưới đây:

Kịch bản 'find' là một tệp có tên FindFilesAndListtoTextfile.sh:

#! /usr/bin/bash
#Try this to list the files you want using the appropriate file identifier i.p.o "DSCN.*":

source="/home/myself/Whatever  #note no gaps on either side of the equal-to sign 
 target="/home/myself/Whatever/found.txt"
 find $source -name "*DSCN*" -type f > $target       

Tập lệnh mã hóa được gọi là ReadFilenameAndEncrypt.sh:

#!/bin/bash
line="/home/myself/Whatever/found.txt"
while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Text read from file: $line"
    gpg2 -e -u mysecretkeyID -r mysecretkeyID "$line"
  done < "$1"

Điều này sẽ được chạy như một người dùng thông thường:

$ bash ReadFilenameAndEncrypt.sh found.txt

Hi vọng điêu nay co ich. Không tìm ra cách để tránh y / n.


0

Lệnh sau hoạt động với tôi miễn là tôi không có bất kỳ tên tệp nào có khoảng trắng trong đó.

for file in $(ls | grep -v ".gpg"); do gpg -c --cipher-algo AES256 --compress-algo 1 --batch --passphrase "<password>" $file && rm -f $file; done

Bạn cũng có thể sử dụng lệnh find là tốt.

for file in $(find /home -type f | grep -v ".gpg"); do gpg -c --cipher-algo AES256 --compress-algo 1 --batch --passphrase "<password>" $file && rm -f $file; done

Cuối cùng, nếu bạn muốn sử dụng một tệp cho mật khẩu, hãy sử dụng:

--passphrase-file <filename>

-1

Có một cách dễ dàng:

for x in *; do 
  gpg -r (yourencrytionkey.com) -o $x.pgp -e $x
done

-1

echo "Nhập mật khẩu:"

đọc mật khẩu

tìm thấy . -type f -exec gpg - mật khẩu $ password -c {} \;

GPmm Hmmmmmm yêu cầu với GraphicMessageBox mật khẩu cho mỗi tệp.

Vì vậy, tôi đã quyết định sử dụng CRYBULL (chương trình mã hóa mà tôi đã tạo) trong C-ANSI. Bạn có thể tải xuống miễn phí tại www.labolida.com

tìm thấy . -type f -exec crybull {} {} .cry $ mật mã \;


Hãy cố gắng để làm cho câu trả lời công phu hơn. Ngoài ra, câu hỏi này đã được trả lời. Đọc FAQ để học nóng để trả lời đúng câu hỏi .
zuazo
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.