Jak szybko zaszyfrować plik za pomocą AES?

81

Chcę zaszyfrować plik za pomocą AES-256. Jak mogę to zrobić szybko i łatwo i jak mogę - lub ktoś inny - ponownie go odszyfrować?

Stefano Palazzo
źródło

Odpowiedzi:

86

Niestety nie ma łatwego rozwiązania do zabezpieczenia swoich rzeczy. Pomyśl o swoim przypadku użycia, być może coś innego niż zwykły AES jest bardziej odpowiedni.


Jeśli chcesz bardzo prostego, niezależnego od platformy szyfrowania, możesz użyć openssl .

Uwaga: możesz użyć tego, aby ukryć prezent urodzinowy-pomysły.txt przed współlokatorem, ale nie oczekuj, że będzie on zabezpieczony przed zdeterminowanym napastnikiem!

  1. Jak wskazano w komentarzach, ta metoda wykorzystuje naiwną funkcję wyprowadzania klucza, więc twoje hasło musi być wyjątkowo dobre, abyś miał szansę być bezpieczny.
  2. Ponadto ta metoda nie uwierzytelnia tekstu zaszyfrowanego, co oznacza, że ​​osoba atakująca może zmodyfikować lub uszkodzić zawartość bez zauważenia.
  3. W przypadku wielu rodzajów zabezpieczeń szyfrowanie to po prostu za mało (np. Nie można po prostu użyć szyfrowania do bezpiecznej komunikacji)

Jeśli nadal chcesz korzystać z openssl:

  • Szyfrowanie:

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

  • Deszyfrowanie:

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

Możesz uzyskać openssl, aby base64zakodować wiadomość, używając -aprzełącznika zarówno szyfrowania, jak i deszyfrowania. W ten sposób możesz na przykład wkleić tekst zaszyfrowany do wiadomości e-mail. Będzie to wyglądać tak:

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=

Pamiętaj, że masz do wyboru szyfry i tryby działania. Do normalnego użytkowania polecam aes 256 w trybie CBC. Oto dostępne tryby szyfrów (tylko zliczanie 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

Zobacz też:

Proszę zanotować:

OpenSSL poprosi o podanie hasła. To nie jest klucz szyfrujący, nie jest ograniczony do 32 bajtów! Jeśli zamierzasz przesyłać pliki z kimś innym, Twój wspólny sekret powinien być bardzo silny. Możesz użyć tej strony, aby dowiedzieć się, jak dobre jest Twoje hasło:

Ostrzeżenie: sprawdziłem, czy te witryny nie wysyłają hasła do serwera, ale można je zmienić w dowolnym momencie. Skorzystaj z tych stron za pomocą narzędzi deweloperskich / inspektora i sprawdź, czy coś wysyłają przed wpisaniem silnego hasła.

Stefano Palazzo
źródło
9
openssl aes-256-cbcjest krótszy niż openssl enc -aes-256-cbci też działa. Strona podręcznika jest dostępna po uruchomieniu man enc. Nigdy nie używaj ecbdanych, które nie powinny być hartowane, zawsze używaj cbc. -saltjest zbędny, ponieważ jest domyślny. Jeśli pominiesz -out filenamedane wyjściowe zostaną zapisane na standardowe wyjście, co jest przydatne, jeśli potrzebujesz tylko przeanalizować dane, ale nie zapisać ich na dysku. Następnego komenda pokazuje cound liniowy tekstu jawnego: openssl aes-256-cbc -d -in filename | wc -l. (przeznaczenia, odczytywania pliku: openssl aes-256-cbc -d -in filename | less)
Lekensteyn
1
Używam prawie dokładnie tego w skrypcie: /usr/bin/openssl enc -aes-256-cbc -a -salt -in $1 -out ${1}.enc z odwrotnością, jak można się spodziewać.
belacqua,
1
Nie ma powodu, aby preferować AES 256 niż AES 128. @Lekensteyn Nigdy nie używaj EBC do poufnych danych - zasadniczo EBC nigdy nie powinien być używany (tylko dla ekspertów: EBC nigdy nie powinien być używany, z wyjątkiem niektórych bardzo szczególnych przypadków). Mówiąc bardziej ogólnie, opensslnarzędzie wiersza poleceń jest głównie sprawdzianem koncepcji do testowania biblioteki OpenSSL. Prawidłowa odpowiedź na to pytanie to GPG lub jakiś archiwizator, taki jak 7z .
Gilles
1
Chciałbym dodać, że openssl enctak naprawdę nie jest tak bezpieczne, jeśli masz słabe hasło. Wcześniej zalecałem pewne użycie openssl enc, ale teraz sugeruję użycie gpgzamiast tego, ponieważ używa KDF w lepszy sposób. Zobacz tę odpowiedź .
Lekensteyn
2
-1 Do rekomendowania niskiego poziomu OpenSSL. Nie zapewnia żadnej funkcji HMAC i jak wskazuje @Lekensteyn, brakuje odpowiedniego KDF.
gertvdijk
26

Lubię używać gpgpolecenia:

Szyfruj:

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

Stenografia:

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

To poprosi o hasło.

Odszyfruj:

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

Stenografia:

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

Możesz także dodać, cipher-algo AES256aby ustawić ~/.gnupg/gpg.confAES256 jako domyślny. (Według strony podręcznika jest to CAST5 )

scrrr
źródło
Możesz także użyć AES(czyli AES-128). AES-128 jest nieco szybszy i nie jest mniej bezpieczny.
Gilles
2
+1. Zauważ również, że GnuPG zapewnia również uwierzytelnianie wiadomości (HMAC) podczas korzystania z AES (którego OpenSSL nie jest najbardziej pozytywną odpowiedzią w momencie pisania). Informacje w tle: superuser.com/a/633716/157409
gertvdijk
Jak mogę zapobiec gpgbuforowaniu hasła?
user76284
16

7z (gdy używana jest opcja hasła ) wykorzystuje 256-bitowe szyfrowanie AES (z rozciąganiem klucza SHA256 ).

Zainstaluj go ( p7zip-full), kliknij prawym przyciskiem myszy plik lub katalog, który chcesz zaszyfrować, i wybierz Kompresuj , .7z i Inne opcje / Hasło .

wprowadź opis zdjęcia tutaj

W celu odszyfrowania kliknij prawym przyciskiem myszy plik .7z i wybierz opcję Wyodrębnij tutaj .

zorganizować
źródło
1
Jak uruchomić GUI dla 7z?
m0skit0
4

aescrypt

Powiązana witryna zawiera 256-bitowe narzędzie AES do szyfrowania / deszyfrowania i jest wieloplatformowa - MacOs, Windows, Linux i inne za pośrednictwem Java.

Szyfruj: aescrypt -e <file>

Odszyfruj: aescrypt -d <file>

Możesz wykonać kopię zapasową i zaszyfrować swój folder domowy, używając składni:

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

instalacja ubuntu

Pobierz i rozpakuj źródło

make
sudo make install

inne platformy

Pobierz pliki binarne lub kod źródłowy ze strony internetowej.

fossfreedom
źródło
3

Wiele sugestii, które bym przedstawił, zostało już przedstawionych w tym wątku. Zasadniczo openssl jest naprawdę najłatwiejszym sposobem na szyfrowanie pliku lub skryptu. Jednak odradzam używanie AES-256 tylko dlatego, że nie jest on dostępny we wszystkich wersjach openssl na niektórych platformach. Większość nowszych systemów operacyjnych ... tzn. Linux ma to. Ale inne, takie jak AIX 5.3, tego nie robią (myślę, że także HP-UX). Jeśli zamierzasz używać swojego pliku lub skryptu na różnych platformach, zdecydowanie zalecamy używanie AES-128, ponieważ jest on dostępny wszędzie.

Jak „szybko i łatwo” zaszyfrować plik za pomocą AES-128?

Strona taka jak www.ShellScrypt.com używa dość intensywnie openssl AES-128 do szyfrowania skryptów powłoki, a następnie sprawia, że ​​zaszyfrowane kopie skryptów są wykonywalne. Wszystko, co musisz zrobić, to wkleić skrypt na stronę, a zostanie wygenerowany plik zip. Ten plik zip będzie zawierał zaszyfrowaną (i wykonywalną, jeśli jest to skrypt) wersję pliku. Umożliwia to „ łatwe ” i „ wygodne ” szyfrowanie pliku / skryptu bez konieczności spełniania wymagań dotyczących pakietu lub modułu w każdym systemie, w którym zamierzasz używać skryptu lub uruchamiać kilka skomplikowanych i mylących inkantacji poleceń openssl.

Poniżej pokazano podstawowe polecenie szyfrowania / deszyfrowania openssl, które korzysta z 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:~$
Uproszczone prace
źródło
2
Po prostu zostawiając komentarz, aby dowiedzieć się, że „shellscrypt.com” jest wyłączony (np. Strona zniknęła).
e-sushi
1

Dodając do odpowiedzi Stefano Palazzo, stworzyłem małą funkcję bash, która działa podobnie do polecenia base64.

Aes256 zaszyfruje plik, a następnie koduje go base64. Podczas wykonywania operacji odwrotnej kodowanie bazowe będzie dekodowane, deszyfrowane, a następnie wypluwany oryginalny tekst jawny.

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"
}

Stosowanie:

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.
aggregate1166877
źródło