Pode não ser popular, mas estou trabalhando em um projeto para criptografar / descriptografar qualquer coisa com o mínimo de interação do usuário por meio do uso de alguns scripts Bash. Aqui está um link para o Hak5 post que explica a configuração para testes.
Cortando as lógicas do código-fonte, mas eis o que acontece para cada tipo de dado que pode ser tratado pelo projeto vinculado acima
_gnupg_encrypt_opts="--always-trust --armor --batch --encrypt --recipient [email protected]"
_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}"
A variável ${_mapped_input}
é configurada lendo um arquivo de pipe nomeado mkfifo
e configurando qualquer coisa lida para uma matriz com mapfile -t _lines < "${_file_to_map}"
, que é posteriormente expandida e salva em ${_mapped_input}
... um pouco complicado, mas permite para recursos experimentais para atuar em linhas individuais. Os resultados finais terminam com um diretório para armazenar arquivos criptografados ou diretórios compactados e um arquivo com vários pacotes de dados criptografados.
A descriptografia de arquivos ou diretórios compactados é simples o suficiente em um dispositivo com uma chave privada relacionada à chave pública usada para criptografia. Mas a descriptografia de pacotes de dados criptografados com múltiplas armaduras foi um pouco mais difícil, então existe um script chamado Paranoid_Pipes_Scenario_One.sh
no projeto acima escrito para fazer tudo com o mínimo de interação do usuário. Abaixo está uma versão simplificada do código-fonte dos scripts auxiliares para arquivos e diretórios criptografados normais.
_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}"
Se você deseja ver quais outros recursos estão funcionando e sendo testados de uma forma publicamente verificável, então confira o Travis-CI logs de compilação (especialmente perto do fim dos logs) você encontrará algumas outras coisas interessantes sendo trabalhadas em relação à criptografia e descriptografia de quase todos os dados.