Chcę zaszyfrować i odszyfrować jeden plik za pomocą jednego hasła.
Jak mogę to zrobić za pomocą OpenSSL?
encryption
openssl
aF.
źródło
źródło
PKCS5_PBKDF2_HMAC
. Należy użyćEVP_*
funkcji do szyfrowania i deszyfrowania. Zobacz Symetryczne szyfrowanie i deszyfrowanie EVP na wiki OpenSSL. W rzeczywistości prawdopodobnie powinieneś używać uwierzytelnionego szyfrowania, ponieważ zapewnia ono zarówno poufność, jak i autentyczność. Zobacz: Szyfrowanie i deszyfrowanie uwierzytelnione EVP na wiki OpenSSL.Odpowiedzi:
Szyfruj:
Odszyfruj:
Więcej informacji na temat różnych flag
źródło
-md sha256
do swojego polecenia kodowania i dekodowania, jeśli planujesz używać tego pliku na innym komputerze. To powinno Cię zabezpieczyć przed niezgodnościami / różnicami wersji OpenSSLKrótka odpowiedź:
Prawdopodobnie chcesz użyć
gpg
zamiast tegoopenssl
, patrz „Dodatkowe uwagi” na końcu tej odpowiedzi. Ale aby odpowiedzieć na pytanie, używającopenssl
:Aby zaszyfrować:
Aby odszyfrować:
Uwaga: Podczas szyfrowania lub deszyfrowania pojawi się monit o podanie hasła.
Długa odpowiedź:
Najlepszym źródłem informacji jest
openssl enc
prawdopodobnie: https://www.openssl.org/docs/man1.1.1/man1/enc.htmlWiersz polecenia:
openssl enc
przyjmuje następującą postać:Wyjaśnienie najbardziej przydatnych parametrów w odniesieniu do twojego pytania:
Dodatkowe uwagi:
Chociaż konkretnie pytałeś o OpenSSL, możesz rozważyć użycie GPG zamiast do szyfrowania na podstawie tego artykułu OpenSSL vs GPG do szyfrowania kopii zapasowych poza witryną?
Aby użyć tego samego GPG, użyj następujących poleceń:
Aby zaszyfrować:
Aby odszyfrować:
Uwaga: Podczas szyfrowania lub deszyfrowania pojawi się monit o podanie hasła.
źródło
gpg
pozwala mi odszyfrować plik bez pytania o hasło. Wygląda na to, że hasło jest przechowywane przez pewien czas, czego nie chcę.--no-symkey-cache
wyłącza buforowanie podczas używania gpg z--symmetric
, nawet jeśli agent jest uruchomiony.Szyfruj:
Odszyfruj:
Aby uzyskać szczegółowe informacje, zobacz
openssl(1)
dokumenty.źródło
-k symmetrickey
się-pass stdin
lub-pass 'pass:PASSWORD'
-k symmetrickey
jest to mylące.-k
Opcja służy do podawania hasła, z którego wywodzi OpenSSL klucz symetryczny. Jeśli chcesz określić klucz symetryczny, musisz użyć-K
opcji.NIE UŻYWAJ DOMYŚLNEJ POCHODZENIA OPENSSL.
Obecnie zaakceptowana odpowiedź korzysta z niej i nie jest już zalecana ani bezpieczna.
Jest bardzo możliwe, aby atakujący po prostu brutalnie nacisnął klawisz.
https://www.ietf.org/rfc/rfc2898.txt
Zrób to:
openssl enc -aes-256-cbc -pbkdf2 -iter 20000 -in hello -out hello.enc -k meow
openssl enc -d -aes-256-cbc -pbkdf2 -iter 20000 -in hello.enc -out hello.out
Uwaga : Iteracje w odszyfrowywaniu muszą być takie same jak iteracje w szyfrowaniu.
Iteracje muszą wynosić co najmniej 10000. Oto dobra odpowiedź na temat liczby iteracji: https://security.stackexchange.com/a/3993
Ponadto ... mamy tutaj wystarczającą liczbę osób, które polecają GPG. Przeczytaj to cholerne pytanie.
źródło
Aby zaszyfrować:
Aby odszyfrować:
bf === Blowfish w trybie CBC
źródło
Zaktualizuj za pomocą losowo wygenerowanego klucza publicznego.
Encypt:
Odszyfruj:
Mam pełny samouczek na ten temat pod adresem http://bigthinkingapplied.com/key-based-encryption-using-openssl/
źródło
Zauważ, że interfejs OpenSSL CLI używa słabego niestandardowego algorytmu do konwersji hasła na klucz, a instalacja GPG powoduje dodanie różnych plików do katalogu domowego i uruchomienie procesu w tle agenta gpg. Jeśli chcesz mieć maksymalną przenośność i kontrolę przy użyciu istniejących narzędzi, możesz użyć PHP lub Pythona, aby uzyskać dostęp do interfejsów API niższego poziomu i bezpośrednio przekazać pełny klucz AES i IV.
Przykład wywołania PHP przez Bash:
To daje:
Możesz także użyć
openssl_pbkdf2
funkcji PHP, aby bezpiecznie przekonwertować hasło na klucz.źródło
Istnieje program open source, który znajduję online, który używa openssl do szyfrowania i deszyfrowania plików. Robi to za pomocą jednego hasła. Wspaniałą rzeczą w tym skrypcie typu open source jest to, że usuwa on oryginalny nieszyfrowany plik, niszcząc go. Ale niebezpieczną rzeczą jest to, że po zniknięciu oryginalnego niezaszyfrowanego pliku musisz upewnić się, że pamiętasz hasło, w przeciwnym razie nie będzie to żaden inny sposób na odszyfrowanie pliku.
Tutaj link znajduje się na github
https://github.com/EgbieAnderson1/linux_file_encryptor/blob/master/file_encrypt.py
źródło
Jak wspomniano w innych odpowiedziach, poprzednie wersje openssl używały funkcji wyprowadzania słabego klucza do uzyskania klucza szyfrowania AES z hasła. Jednak openssl 1.1.1 obsługuje silniejszą funkcję wyprowadzania klucza, w której klucz jest uzyskiwany z hasła przy użyciu
pbkdf2
losowo generowanej soli i wielokrotnych iteracji mieszania sha256 (domyślnie 10 000).Aby zaszyfrować plik:
Aby odszyfrować plik:
źródło
Dodatkowe komentarze do dobrej odpowiedzi mti2935.
Wydaje się, że im wyższa iteracja, tym lepsza ochrona przed brutalną siłą i powinieneś używać wysokiej iteracji, ponieważ możesz sobie pozwolić na wydajność / zasoby.
Na moim starym Intelie i3-7100 szyfrującym dość duży plik 1,5 GB:
Naprawdę nie ma różnicy, chociaż nie sprawdziłem użycia pamięci (?)
Przy dzisiejszych procesorach graficznych i jeszcze szybszych jutrach wydaje mi się, że miliard iteracji brutalnej siły wydaje się możliwy co sekundę.
12 lat temu
NVIDIA GeForce 8800 Ultra
można było iterować ponad 200 000 milionów / s iteracji (choć skrót MD5)źródło: Ainane-Barrett-Johnson-Vivar-OpenSSL.pdf
źródło