Шифруйте декілька файлів одночасно


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? Я не бачу, що це значно заробляє у плані просторової ефективності, і я вважаю, що це коштує багато процесора.
CVn

1
> Чи є спосіб передати кілька файлів файлу gpg, щоб він шифрувався> всі вони за один раз? Так, спробуйте цю відповідь
Анчан

Відповіді:


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`"
}

Використання: просто використовуйте "резервну копію DIRECTORY" для шифрування та "розшифруйте DIRECTORY.tar.gz.aes"


1

Сьогодні вдалося зробити щось подібне:

  1. Змінив каталог до каталогу, що містить цільові файли, та запустив сценарій Bash, щоб знайти потрібні імена файлів та перерахувати їх у текстовий файл, який я зателефонував found.txt.

  2. Запустив сценарій Bash з проханням gpg2 прочитати кожне ім'я файлу в циклі та в змінну пам'яті, а в тому ж циклі, щоб зашифрувати його за допомогою мого ключа підписання та вказавши, що це було для читання власноруч. gpg2 відображає спливаюче вікно для введення фрази пропуску, у спливаючому вікні є невеликий прапорець, де ви можете вибрати, щоб фраза пропуску була активною для сеансу. Погана практика, але не така вже й погана, якщо ви тоді не в Мережі, і ви вимкнете роботу відразу після сеансу шифрування.

  3. Єдиною проблемою було те, що було обробляти ay / n. Так я сів пальцем на клавішу Y і зашифрував 51 файл носа за менше хвилини.


Сценарії наведені нижче:

Сценарій «знайти» був файлом під назвою 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

Сподіваюсь, це допомагає. Не знайшли, як уникнути г / п.


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 "Введіть пароль:"

читати пароль

знайти. -тип f -exec gpg --passphrase $ password -c {} \;

Hmmmmmm GPG запитує у GraphicMessageBox пароль для кожного файлу.

Отже, я вирішив використовувати CRYBULL (програму криптографії, яку я створив) у C-ANSI. Ви можете завантажити безкоштовно на www.labolida.com

знайти. -тип f -exec crybull {} {} .cry $ password encode \;


Спробуйте зробити більш детальні відповіді. Крім того, на це питання вже відповіли. Прочитайте FAQ, щоб навчитися відповідати на питання правильно .
Зуазо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.