เข้ารหัสหลายไฟล์พร้อมกัน


10

ฉันกำลังเขียนสคริปต์ที่สร้างที่เก็บถาวรโครงการแล้วสร้างที่เก็บถาวร 7z เพื่อให้ง่ายต่อการบันทึกรุ่นที่ระบุและเก็บสำรองข้อมูลที่เข้ารหัส

หลังจากที่ฉันสร้างที่เก็บถาวรและฉันได้รับการเข้ารหัสฉันต้องการเข้ารหัสไฟล์ด้วยการโทรเพียงครั้งเดียวgpgถ้าเป็นไปได้เพื่อให้ผู้ใช้ป้อนข้อความรหัสผ่านของพวกเขาเพียงครั้งเดียว มิฉะนั้นเราอาจต้องใส่ข้อความรหัสผ่านของผู้ใช้ในหน่วยความจำ (ซึ่งฉันไม่ต้องการทำ) หรือให้พวกเขาป้อนข้อมูลและยืนยันข้อความรหัสผ่านของพวกเขาสำหรับทุกโครงการที่ถูกเก็บถาวร (ซึ่งแย่กว่า)

มีวิธีการส่งชื่อไฟล์หลาย ๆ ไฟล์เพื่อgpgเข้ารหัสมันทั้งหมดในครั้งเดียวหรือไม่?

ถ้าฉันลองทำสิ่งนี้:

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

... ฉันเห็นข้อผิดพลาดต่อไปนี้ในเชลล์:

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

มีวิธีการทำสิ่งที่ฉันต้องการสำเร็จหรือไม่


2
ทำไมคุณถึงใช้ 7zip (สมมุติ) เป็นครั้งแรกในการบีบอัดจากนั้นแจ้งให้ GnuPG ทำการบีบอัดอีกครั้งโดยใช้ bzip2 ฉันไม่เห็นว่าการได้มาซึ่งคุณมากในแง่ของประสิทธิภาพพื้นที่และฉันเห็นว่ามันคุ้มค่ากับ CPU มาก
CVn

1
> มีวิธีการส่งชื่อไฟล์หลายรายการไปยัง gpg เพื่อให้มีการเข้ารหัสหรือไม่> ทั้งหมดในครั้งเดียว ใช่ลองคำตอบนี้
Anchan

คำตอบ:


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

ไม่ไม่มี

คุณอาจต้องการส่งข้อความรหัสผ่านด้วยหนึ่งในตัวเลือก gpg ต่อไปนี้ (ตัวเลือกหลังจะเป็นตัวเลือกที่ปลอดภัยที่สุด):

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

10

ตั้งแต่ GnuPG tarไม่สนับสนุนการนี้โดยตรงวิธีการทำเช่นนี้จะเพิ่มอีกชั้นหนึ่งเช่นใช้

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

และเพื่อแยก:

gpg -d projects.gpg | tar x

คุณจะถูกทิ้งให้อยู่กับและproject1.7z project2.7zสคริปต์ของคุณสามารถเลือกตำแหน่งที่คุณค้างไว้ได้


3

หากคุณต้องการลองอย่างอื่น GPG มีวิธีการสำรองข้อมูลอื่น ๆ สำหรับการเข้ารหัสไฟล์หลายไฟล์:

แหล่งต้นฉบับ: 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`"
}

การใช้งาน: เพียงแค่ใช้ "backup DIRECTORY" สำหรับการเข้ารหัสและ "ถอดรหัส DIRECTORY.tar.gz.aes"


1

มีการจัดการที่จะทำสิ่งนี้ในวันนี้:

  1. เปลี่ยนไดเรกทอรีไดเรกทอรีที่มีไฟล์เป้าหมายและวิ่งสคริปต์ทุบตีเพื่อหา file_names found.txtที่จำเป็นและรายการพวกเขาไปยังแฟ้มข้อความที่ผมเรียกว่า

  2. เรียกใช้สคริปต์ทุบตีขอให้ gpg2 อ่านชื่อไฟล์แต่ละรายการในลูปและเป็นตัวแปรหน่วยความจำและในลูปเดียวกันเพื่อเข้ารหัสโดยใช้คีย์การเซ็นชื่อของฉันและระบุว่าเป็นการอ่านด้วยตัวเอง gpg2 วางป๊อปอัพสำหรับใส่วลีรหัสผ่านของคุณซึ่งป๊อปอัปมีช่องทำเครื่องหมายเล็ก ๆ น้อย ๆ ซึ่งคุณสามารถเลือกที่จะให้วลีรหัสผ่านของคุณใช้งานได้ในเซสชัน การปฏิบัติที่ไม่ถูกต้อง แต่ไม่เลวร้ายถ้าคุณไม่ได้อยู่บนอินเทอร์เน็ตและคุณปิดเครื่องทันทีหลังจากเซสชันการเข้ารหัสของคุณ

  3. ปัญหาเดียวก็คือว่ามี ay / n ที่จะจัดการ นั่งด้วยนิ้วของฉันบนปุ่ม Y และเข้ารหัสไฟล์ 51 nos ในเวลาน้อยกว่าหนึ่งนาที


สคริปต์ได้รับด้านล่าง:

สคริปต์ 'find' เป็นไฟล์ชื่อ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       

สคริปต์การเข้ารหัสเรียกว่า 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"

นี่คือการเรียกใช้ในฐานะผู้ใช้ปกติ:

$ bash ReadFilenameAndEncrypt.sh found.txt

หวังว่านี่จะช่วยได้ ยังไม่ได้คิดวิธีการหลีกเลี่ยง y / n


0

คำสั่งต่อไปนี้ใช้ได้กับฉันตราบใดที่ฉันไม่มีชื่อไฟล์ใด ๆ ที่มีช่องว่างในนั้น

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

คุณสามารถใช้คำสั่ง find ได้เช่นกัน

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

สุดท้ายหากคุณต้องการใช้ไฟล์สำหรับรหัสผ่านให้ใช้:

--passphrase-file <filename>


-1

echo "ป้อนรหัสผ่าน:"

อ่านรหัสผ่าน

หา -type f -exec gpg - passphrase $ password -c {} \;

Hmmmmmm GPG ถามด้วย GraphicMessageBox รหัสผ่านสำหรับแต่ละไฟล์

ดังนั้นฉันจึงตัดสินใจใช้ CRYBULL (โปรแกรมเข้ารหัสที่ฉันสร้าง) ใน C-ANSI คุณสามารถดาวน์โหลดได้ฟรีที่www.labolida.com

หา -type f -exec crybull {} {} .cry $ เข้ารหัสรหัสผ่าน \;


โปรดลองทำคำตอบที่ซับซ้อนยิ่งขึ้น นอกจากนี้คำถามนี้มีคำตอบแล้ว อ่านคำถามที่พบบ่อยในการเรียนรู้ร้อนเพื่อตอบคำถามถูกต้อง
zuazo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.