Come crittografare rapidamente un file con AES?


81

Voglio crittografare un file usando AES-256. Come posso farlo rapidamente e facilmente e come posso - o qualcun altro - decodificarlo di nuovo?

Risposte:


86

Sfortunatamente, non esiste una soluzione semplice per proteggere le tue cose. Pensa al tuo caso d'uso, forse qualcosa di diverso dal semplice AES è più adatto.


Se vuoi una crittografia indipendente dalla piattaforma molto semplice, puoi usare openssl .

Nota: puoi usarlo per nascondere birthday-gift-ideas.txt dal tuo compagno di stanza, ma non aspettarti che sia sicuro contro un determinato attaccante!

  1. Come è stato sottolineato nei commenti, questo metodo utilizza una funzione di derivazione della chiave ingenua, quindi la tua password deve essere superlativamente buona per avere la possibilità di essere sicura.
  2. Inoltre, questo metodo non autentica il testo cifrato, il che significa che un utente malintenzionato può modificare o corrompere i contenuti senza che te ne accorga.
  3. Per molti tipi di sicurezza, la crittografia non è semplicemente sufficiente (ad esempio non è possibile utilizzare la crittografia solo per comunicare in modo sicuro)

Se vuoi ancora usare openssl:

  • crittografia:

    openssl aes-256-cbc -in attack-plan.txt -out message.enc

  • decrittazione:

    openssl aes-256-cbc -d -in message.enc -out plain-text.txt

Puoi ottenere openssl per base64codificare il messaggio usando l'opzione -asia sulla crittografia che sulla decrittografia. In questo modo, ad esempio, puoi incollare il testo cifrato in un messaggio e-mail. Sarà simile a questo:

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=

Si noti che è possibile scegliere tra cifre e modalità operative. Per un uso normale, raccomando aes 256 in modalità CBC. Queste sono le modalità di cifratura disponibili (contando solo 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

Guarda anche:

Notare che:

OpenSSL ti chiederà una password. Questa non è una chiave di crittografia, non è limitata a 32 byte! Se hai intenzione di trasferire file con qualcun altro, il tuo segreto condiviso dovrebbe essere molto forte. Puoi utilizzare questo sito per capire quanto è buona la tua password:

Avvertenza: ho verificato che questi siti non inviano la password al server, ma che possono cambiare in qualsiasi momento. Utilizzare questi siti con strumenti / ispettore di sviluppo e verificare se inviano qualcosa prima di digitare la password complessa.


9
openssl aes-256-cbcè più corto di openssl enc -aes-256-cbce funziona anche. La pagina di manuale per questo è disponibile eseguendo man enc. Non utilizzare mai ecbper dati che non devono essere temperati, utilizzare sempre cbc. -saltè ridondante poiché è predefinito. Se si omette -out filenamel'output verrà scritto nell'output standard, utile se è necessario solo analizzare i dati, ma non scriverli sul disco. Il comando successivo mostra la cound linea per il testo in chiaro: openssl aes-256-cbc -d -in filename | wc -l. (un altro uso, la lettura di un file: openssl aes-256-cbc -d -in filename | less)
Lekensteyn

1
Uso quasi esattamente questo in una sceneggiatura: /usr/bin/openssl enc -aes-256-cbc -a -salt -in $1 -out ${1}.enc con il contrario come ci si aspetterebbe.
belacqua,

1
Non vi è alcun motivo per preferire AES 256 a AES 128. @Lekensteyn Non usare mai la BCE neanche per i dati riservati - in pratica la BCE non dovrebbe mai essere utilizzata (solo per esperti: la BCE non dovrebbe mai essere utilizzata, tranne in alcuni casi molto specifici). Più in generale, lo opensslstrumento da riga di comando è principalmente un proof-of-concept per testare la libreria OpenSSL. La risposta giusta a questa domanda è GPG o alcuni archiviatori come 7z .
Gilles,

1
Vorrei aggiungere che in openssl encrealtà non è così sicuro se si dispone di una password debole. In precedenza avevo raccomandato un certo utilizzo di openssl enc, ma ora suggerisco di usare gpginvece perché utilizza un KDF in un modo migliore. Vedere questa risposta .
Lekensteyn,

2
-1 Per raccomandare l'uso di OpenSSL di basso livello. Non fornisce alcuna funzionalità HMAC e come sottolinea @Lekensteyn, manca di KDF corretto.
gertvdijk,

26

Mi piace usare il gpgcomando:

Encrypt:

gpg --cipher-algo AES256 --symmetric filename.tar.gz

Abbreviazione:

gpg --cipher-algo AES256 -c filename.tar.gz

Ciò richiederà una passphrase.

decrypt:

gpg --output filename.tar.gz --decrypt filename.tar.gz.gpg

Abbreviazione:

gpg -o filename.tar.gz -d filename.tar.gz.gpg

È inoltre possibile aggiungere cipher-algo AES256a ~/.gnupg/gpg.confper impostare AES256 come predefinito. (Secondo manpage è CAST5 )


Puoi anche usare AES(che significa AES-128). AES-128 è leggermente più veloce e non è meno sicuro.
Gilles,

2
+1. Si noti inoltre che GnuPG fornisce anche l'autenticazione dei messaggi (HMAC) quando si utilizza AES (di cui OpenSSL non ha la risposta più votata al momento della scrittura). Informazioni di base: superuser.com/a/633716/157409
gertvdijk

Come posso impedire la gpgmemorizzazione nella cache della password?
user76284

16

7z (quando viene utilizzata l' opzione password ) utilizza una crittografia AES a 256 bit (con allungamento della chiave SHA256 ).

Installalo ( p7zip-full), fai clic con il pulsante destro del mouse su un file o una directory che desideri crittografare e scegli Comprimi , .7z e Altre opzioni / Password .

inserisci qui la descrizione dell'immagine

Per la decrittazione, fai clic con il pulsante destro del mouse sul file .7z e scegli Estrai qui .


1
Come si avvia la GUI per 7z?
m0skit0

4

aescrypt

Il sito Web collegato contiene uno strumento di crittografia / decrittografia di aes a 256 bit open source ed è multipiattaforma: MacOs, Windows, Linux e altri tramite Java.

Encrypt: aescrypt -e <file>

decrypt: aescrypt -d <file>

È possibile eseguire il backup e crittografare la cartella principale utilizzando la sintassi:

tar -cvf - /home/<home_folder> | aescrypt -e -p <password_message> - > backup.tar.aes

installazione di Ubuntu

Scarica ed estrai la fonte

make
sudo make install

altre piattaforme

Scarica i binari o il codice sorgente dal sito Web.


3

Molti dei suggerimenti che avrei formulato sono già stati formulati in questo thread. Fondamentalmente, openssl è davvero il modo più semplice per crittografare un file o uno script. Tuttavia, vorrei evitare di utilizzare AES-256 solo perché non è disponibile in tutte le versioni di openssl su alcune piattaforme. La maggior parte dei sistemi operativi più recenti ... ovvero Linux ce l'hanno. Ma altri come AIX 5.3 no (penso anche HP-UX). Se si intende utilizzare il file o lo script su piattaforme diverse, si consiglia vivamente di utilizzare AES-128 perché è disponibile ovunque.

Come è possibile "crittografare rapidamente e facilmente" un file utilizzando AES-128?

Un sito come www.ShellScrypt.com utilizza openssl AES-128 abbastanza intensamente per crittografare gli script della shell e quindi rende eseguibili le copie crittografate degli script. Tutto quello che devi fare è incollare lo script sul sito e verrà generato un file zip per te. Tale file zip conterrà la versione crittografata (ed eseguibile se si tratta di uno script) del file. Questo ti permette di crittografare " facilmente " e " comodamente " un file / script senza dover soddisfare alcun requisito di pacchetto o modulo su ogni sistema su cui intendi utilizzare lo script o eseguire diversi incantesimi complessi e confusi di comandi openssl.

Di seguito è mostrato un comando di base encrypt / decrypt openssl che utilizza 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 lasciare un commento per dare un avvertimento che "shellscrypt.com" è fuori uso (ovvero: il sito è andato).
e-sushi,

1

Aggiungendo alla risposta di Stefano Palazzo, ho creato una piccola funzione bash che funziona in modo simile al comando base64.

Aes256 crittograferà un file, quindi base64 lo codificherà. Quando fa il contrario, decodificherà, decodificherà e quindi sputerà il testo in chiaro originale.

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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.