Какая самая популярная команда для шифрования файла или каталога в терминале в Linux?
7 ответов
Я думаю, что это будет GPG. Хотя синтаксис для файлов и каталогов отличается.
шифрование
Для файлов (выводит filename.gpg):
gpg -c filename
Для директоров:
gpg-zip -c -o file.gpg dirname
Дешифрирование
Для файлов (выводит filename.gpg):
gpg filename.gpg
Для директоров:
gpg-zip -d file.gpg
Редактировать: Исправлено как @ Mk12 указывает на ошибку сжатия / распаковки для шифрования / дешифрования.
- с openssl
openssl des3 -salt -in unencrypted-data.tar -out encrypted-data.tar.des3
Расшифровать:
openssl des3 -d -salt -in encrypted-data.tar.des3 -out unencrypted-data.tar
- зашифровать с помощью AES
aescrypt -e -p password file.jpg
Расшифровать:
aescrypt -d -p password file.jpg.aes
Я лично использую в основном aescrypt
.
aescrypt -e "File"
и расшифровывать:
aescrypt -d "File"
Или есть Mcrypt:
mcrypt "File"
и расшифровывать:
mcrypt -d "File"
А для каталога я предлагаю смонтировать каталог и зашифровать его. Затем после дешифрования просто распакуйте файл:
tar -cf "Dir.tar" Dir/
и распутать
tar -xf "Dir.tar"
Это мой метод с использованием openssl и tar
Открыть зашифрованный каталог:
openssl enc -aes-256-cbc -d -in ~/vault.tar.gz.dat | tar xz; thunar ~/vault
Блокировка зашифрованного каталога:
tar cz vault/ | openssl enc -aes-256-cbc -out ~/vault.tar.gz.dat; rm -r ~/vault
Если высокий уровень безопасности не является большой проблемой (на странице руководства zip сказано, что алгоритм шифрования, используемый утилитами zipfile, слабее, чем PGP), то я предпочитаю zip и unzip. Это архивирует мои каталоги и шифрует одновременно. Я предпочитаю zip, потому что вы можете иметь своего рода инкрементный zip и шифрование вместо того, чтобы снова зашифровать и зашифровать все это. Особенно это полезно, когда размеры каталогов очень велики.
ZIP и шифрование
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
Распакуйте и расшифруйте
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
Возможно, это не популярно, но я работаю над проектом по шифрованию / дешифрованию чего-либо с минимальным взаимодействием с пользователем с помощью нескольких скриптов Bash. Вот ссылка на пост Hak5, который объясняет настройку для тестирования.
Разрезание логики исходного кода, хотя вот что происходит для каждого типа данных, которые могут быть обработаны вышеуказанным связанным проектом
_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}"
Переменная ${_mapped_input}
устанавливается путем чтения файла именованного канала mkfifo
и установки чего-либо, считываемого в массив, с помощью mapfile -t _lines < "${_file_to_map}"
который впоследствии раскрывается и сохраняется в ${_mapped_input}
... a немного запутанный, но он позволяет экспериментальным функциям действовать по отдельным линиям. В результате вы получите каталог для хранения зашифрованных файлов или сжатых каталогов и файл с различными пакетами зашифрованных данных.
Расшифровка файлов или сжатых каталогов достаточно проста на устройстве с закрытым ключом, связанным с открытым ключом, используемым для шифрования. Но дешифрование нескольких зашифрованных пакетов данных было немного сложнее, поэтому в вышеприведенном проекте был написан скрипт с именем Paranoid_Pipes_Scenario_One.sh
чтобы сделать все это с минимальным взаимодействием с пользователем. Ниже приведена упрощенная версия исходного кода вспомогательных сценариев для обычных зашифрованных файлов и каталогов.
_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}"
Если вы хотите увидеть, какие другие функции работают и тестируются публично проверяемым способом, то посмотрите журналы сборки Travis-CI (особенно ближе к концу журналов), и вы обнаружите, что есть некоторые другие интересные вещи, над которыми работают для шифрования и дешифрования практически любых данных.