Quero criptografar um arquivo usando o AES-256. Como posso fazer isso de maneira rápida e fácil, e como posso - ou outra pessoa - descriptografá-lo novamente?
Quero criptografar um arquivo usando o AES-256. Como posso fazer isso de maneira rápida e fácil, e como posso - ou outra pessoa - descriptografá-lo novamente?
Respostas:
Infelizmente, não há uma solução fácil para proteger suas coisas. Pense no seu caso de uso, talvez algo diferente do simples AES seja mais adequado.
Se você quiser uma criptografia independente de plataforma muito simples, poderá usar o openssl .
Se você ainda deseja usar o openssl:
Criptografia:
openssl aes-256-cbc -in attack-plan.txt -out message.enc
Descriptografia:
openssl aes-256-cbc -d -in message.enc -out plain-text.txt
Você pode obter o openssl para base64
codificar a mensagem usando a -a
opção de criptografia e descriptografia. Dessa forma, você pode colar o texto cifrado em uma mensagem de email, por exemplo. Ficará assim:
stefano:~$ openssl aes-256-cbc -in attack-plan.txt -a
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
U2FsdGVkX192dXI7yHGs/4Ed+xEC3ejXFINKO6Hufnc=
Observe que você pode escolher cifras e modos de operação. Para uso normal, recomendo o aes 256 no modo CBC. Estes são os modos de cifras disponíveis (contando apenas o AES):
aes-128-cbc ← this is okay
aes-128-ecb
aes-192-cbc
aes-192-ecb
aes-256-cbc ← this is recommended
aes-256-ecb
Veja também:
Observe:
O OpenSSL solicitará uma senha. Esta não é uma chave de criptografia, não está limitada a 32 bytes! Se você deseja transferir arquivos com outra pessoa, seu segredo compartilhado deve ser muito forte. Você pode usar este site para ter uma idéia de quão boa é sua senha:
Aviso: verifiquei se esses sites não enviam sua senha ao servidor, mas isso pode ser alterado a qualquer momento. Use esses sites com o dev tools / inspector e verifique se eles enviam algo antes de digitar sua senha forte.
/usr/bin/openssl enc -aes-256-cbc -a -salt -in $1 -out ${1}.enc
com o contrário, como seria de esperar.
openssl
ferramenta de linha de comando é principalmente uma prova de conceito para testar a biblioteca OpenSSL. A resposta certa para esta pergunta é GPG ou algum arquivador como o 7z .
openssl enc
na verdade, não é tão seguro se você tiver uma senha fraca. Anteriormente, eu recomendei certo uso de openssl enc
, mas agora sugiro usá- gpg
lo porque ele usa um KDF de uma maneira melhor. Veja esta resposta .
Eu gosto de usar o gpg
comando:
Criptografar:
gpg --cipher-algo AES256 --symmetric filename.tar.gz
Forma abreviada:
gpg --cipher-algo AES256 -c filename.tar.gz
Isso solicitará uma senha.
Descriptografar:
gpg --output filename.tar.gz --decrypt filename.tar.gz.gpg
Forma abreviada:
gpg -o filename.tar.gz -d filename.tar.gz.gpg
Você também pode adicionar cipher-algo AES256
a ~/.gnupg/gpg.conf
para tornar o AES256 o padrão. (De acordo com a página de manual, é CAST5 )
AES
(ou seja, AES-128). O AES-128 é um pouco mais rápido e não é menos seguro.
gpg
armazenamento em cache da senha?
7z (quando a opção de senha é usada) usa uma criptografia AES de 256 bits (com esticamento de chave SHA256 ).
Instale-o ( p7zip-full
), clique direito em um arquivo ou pasta que você deseja criptografar e escolha Compress , .7z e outras opções / senha .
Para descriptografia, clique com o botão direito do mouse no arquivo .7z e escolha Extrair aqui .
O site vinculado contém uma ferramenta de criptografia / descriptografia de código aberto de 256 bits e é multiplataforma - MacOs, Windows, Linux e outros através de Java.
Criptografar: aescrypt -e <file>
Descriptografar: aescrypt -d <file>
Você pode fazer backup e criptografar sua pasta pessoal usando a sintaxe:
tar -cvf - /home/<home_folder> | aescrypt -e -p <password_message> - > backup.tar.aes
make
sudo make install
Faça o download dos binários ou do código-fonte no site.
Muitas das sugestões que eu teria feito já foram apresentadas neste tópico. Basicamente, o openssl é realmente a maneira mais fácil de criptografar um arquivo ou script. No entanto, eu recomendaria não usar o AES-256 apenas porque ele não está disponível em todas as versões do openssl em algumas plataformas. A maioria dos sistemas operacionais mais recentes ... ou seja, o Linux possui. Mas outros como o AIX 5.3 não (acho que o HP-UX também). Se você pretende usar seu arquivo ou script em diferentes plataformas, eu recomendo o uso do AES-128, pois ele está disponível em qualquer lugar.
Como você pode "rápida e facilmente" criptografar um arquivo usando o AES-128?
Um site como o www.ShellScrypt.com usa o AES-128 openssl com bastante intensidade para criptografar scripts de shell e, em seguida, torna executáveis as cópias criptografadas dos scripts. Tudo o que você precisa fazer é colar o script no site e um arquivo zip será gerado para você. Esse arquivo zip conterá a versão criptografada (e executável se for um script) do seu arquivo. Isso permite que você criptografe " facilmente " e " convenientemente " um arquivo / script sem precisar atender a qualquer requisito de pacote ou módulo em todos os sistemas em que você pretende usar o script ou executar vários encantamentos complexos e confusos de comandos openssl.
Abaixo, é mostrado um comando básico de criptografia / decriptografia openssl que usa o AES-128:
test@test-VirtualBox:~$
test@test-VirtualBox:~$ echo precious-content | openssl aes-128-cbc -a -salt -k mypassword
U2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314z
test@test-VirtualBox:~$
test@test-VirtualBox:~$ echo U2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314z | openssl aes-128-cbc -a -d -salt -k mypassword
precious-content
test@test-VirtualBox:~$
test@test-VirtualBox:~$
Adicionando à resposta de Stefano Palazzo, criei uma pequena função bash que funciona de maneira semelhante ao comando base64.
Aes256 criptografará um arquivo e, em seguida, a base64 o codificará. Ao fazer o inverso, ele irá decodificar, decodificar e depois cuspir o texto sem formatação original.
aes256() {
decodeMe=""
isPipe="$([ ! -t 0 ] && echo "true" || echo "false")"
if [ "$1" = '-d' ] || [ "$1" = '--decode' ]; then
decodeMe="-d"
shift
fi
if [ "$isPipe" = "true" ]; then
read input
printf '%s\n' "$input" | openssl aes-256-cbc -a $decodeMe
exitCode="$?"
else
openssl aes-256-cbc -a $decodeMe -in "$*"
exitCode="$?"
fi
unset isPipe decodeMe input
return "$exitCode"
}
Uso:
echo "my string" | aes256
# enter aes-256-cbc encryption password
# Returns: U2FsdGVkX1++e/BhBGlNOzNvarqq7zI13S/hbiKVzXQ=
echo "U2FsdGVkX1++e/BhBGlNOzNvarqq7zI13S/hbiKVzXQ=" | aes256 -d
# enter aes-256-cbc decryption password
# Returns: my string
aes256 file.plain > file.crypt
# enter aes-256-cbc encryption password
aes256 -d file.crypt
# enter aes-256-cbc decryption password
# Spits out original unencrypted file.
openssl aes-256-cbc
é mais curto queopenssl enc -aes-256-cbc
e também funciona. A página de manual para isso está disponível executandoman enc
. Nunca useecb
para dados que não devem ser temperados, use semprecbc
.-salt
é redundante, pois é padrão. Se você omitir,-out filename
a saída será gravada na saída padrão, o que é útil se você precisar apenas analisar dados, mas não gravá-los no disco. O próximo comando mostra o cound linha para o em textoopenssl aes-256-cbc -d -in filename | wc -l
. (outro uso, lendo um arquivo:openssl aes-256-cbc -d -in filename | less
)