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


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, чтобы он зашифровал их> все за один раз? Да, попробуйте этот ответ
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`"
}

Использование: просто используйте «резервную копию DIRECTORY» для шифрования и «расшифруйте DIRECTORY.tar.gz.aes»


1

Сегодня удалось сделать что-то вроде этого:

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

  2. Запустил сценарий Bash, запрашивающий 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

Надеюсь это поможет. Не разобрался, как избежать г / п.


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

Вы также можете использовать команду поиска.

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 $ password encode \;


Пожалуйста, попробуйте сделать более сложные ответы. Кроме того, на этот вопрос уже дан ответ. Прочитайте FAQ, чтобы научиться правильно отвечать на вопросы .
zuazo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.