Como criptografar rapidamente um arquivo com o AES?


81

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:


86

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 .

Observação: você pode usar isso para ocultar o birthday-gift-ideas.txt do seu companheiro de quarto, mas não espere que ele seja seguro contra um invasor determinado!

  1. Conforme apontado nos comentários, esse método usa uma função de derivação de chave ingênua, portanto sua senha precisa ser superlativamente boa para que você tenha uma chance de estar seguro.
  2. Além disso, esse método não autentica o texto cifrado, o que significa que um invasor pode modificar ou corromper o conteúdo sem você perceber.
  3. Para muitos tipos de segurança, a criptografia simplesmente não é suficiente (por exemplo, você não pode simplesmente usar a criptografia para se comunicar com segurança)

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 base64codificar a mensagem usando a -aopçã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.


9
openssl aes-256-cbcé mais curto que openssl enc -aes-256-cbce também funciona. A página de manual para isso está disponível executando man enc. Nunca use ecbpara dados que não devem ser temperados, use sempre cbc. -salté redundante, pois é padrão. Se você omitir, -out filenamea 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 texto openssl aes-256-cbc -d -in filename | wc -l. (outro uso, lendo um arquivo: openssl aes-256-cbc -d -in filename | less)
Lekensteyn

1
Eu uso quase exatamente isso em um script: /usr/bin/openssl enc -aes-256-cbc -a -salt -in $1 -out ${1}.enc com o contrário, como seria de esperar.
Belacqua

1
Não há motivo para preferir o AES 256 ao AES 128. @Lekensteyn Também nunca use o BCE para dados confidenciais - basicamente o BCE nunca deve ser usado (apenas para especialistas: o BCE nunca deve ser usado, exceto em alguns casos muito específicos). De maneira mais geral, a opensslferramenta 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 .
Gilles

1
Gostaria de acrescentar que, openssl encna verdade, não é tão seguro se você tiver uma senha fraca. Anteriormente, eu recomendei certo uso de openssl enc, mas agora sugiro usá- gpglo porque ele usa um KDF de uma maneira melhor. Veja esta resposta .
precisa saber é o seguinte

2
-1 Para recomendar o uso de OpenSSL de baixo nível. Ele não fornece nenhuma funcionalidade HMAC e, como aponta @Lekensteyn, não possui o KDF adequado.
gertvdijk

26

Eu gosto de usar o gpgcomando:

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 AES256a ~/.gnupg/gpg.confpara tornar o AES256 o padrão. (De acordo com a página de manual, é CAST5 )


Você também pode usar AES(ou seja, AES-128). O AES-128 é um pouco mais rápido e não é menos seguro.
Gilles

2
+1. Observe também que o GnuPG também fornece autenticação de mensagem (HMAC) para você ao usar o AES (ao qual o OpenSSL não possui a resposta mais votada no momento da redação). Informações de plano de fundo: superuser.com/a/633716/157409
gertvdijk

Como posso impedir o gpgarmazenamento em cache da senha?
user76284 30/07

16

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 .

insira a descrição da imagem aqui

Para descriptografia, clique com o botão direito do mouse no arquivo .7z e escolha Extrair aqui .


1
Como você inicia a GUI para 7z?
m0skit0 17/03

4

aescrypt

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

instalação do ubuntu

Baixe e extraia a fonte

make
sudo make install

outras plataformas

Faça o download dos binários ou do código-fonte no site.


3

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:~$

2
Basta deixar um comentário para informar que "shellscrypt.com" está inoperante (também conhecido como: o site sumiu).
e-sushi

1

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.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.