Voglio crittografare un file usando AES-256. Come posso farlo rapidamente e facilmente e come posso - o qualcun altro - decodificarlo di nuovo?
Voglio crittografare un file usando AES-256. Come posso farlo rapidamente e facilmente e come posso - o qualcun altro - decodificarlo di nuovo?
Risposte:
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 .
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 base64
codificare il messaggio usando l'opzione -a
sia 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.
/usr/bin/openssl enc -aes-256-cbc -a -salt -in $1 -out ${1}.enc
con il contrario come ci si aspetterebbe.
openssl
strumento 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 .
openssl enc
realtà 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 gpg
invece perché utilizza un KDF in un modo migliore. Vedere questa risposta .
Mi piace usare il gpg
comando:
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 AES256
a ~/.gnupg/gpg.conf
per impostare AES256 come predefinito. (Secondo manpage è CAST5 )
AES
(che significa AES-128). AES-128 è leggermente più veloce e non è meno sicuro.
gpg
memorizzazione nella cache della password?
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 .
Per la decrittazione, fai clic con il pulsante destro del mouse sul file .7z e scegli Estrai qui .
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
make
sudo make install
Scarica i binari o il codice sorgente dal sito Web.
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:~$
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.
openssl aes-256-cbc
è più corto diopenssl enc -aes-256-cbc
e funziona anche. La pagina di manuale per questo è disponibile eseguendoman enc
. Non utilizzare maiecb
per dati che non devono essere temperati, utilizzare semprecbc
.-salt
è ridondante poiché è predefinito. Se si omette-out filename
l'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
)