2016-09-22 52 views
9

Pobrałem i skompilowałem openssl-1.1.0.Szyfrowanie/odszyfrowywanie nie działa dobrze między dwiema różnymi wersjami openssl

mogę szyfrowania i deszyfrowania przy użyciu tego samego exe openssl (jak here)

[email protected]:~/openssl-1.1.0$ LD_LIBRARY_PATH=. ./apps/openssl aes-256-cbc -a -salt -in file.txt -out file.txt.enc 
enter aes-256-cbc encryption password: 123 
Verifying - enter aes-256-cbc encryption password: 
[email protected]:~/openssl-1.1.0$ LD_LIBRARY_PATH=. apps/openssl aes-256-cbc -a -d -in file.txt.enc -out file.txt.dec 
enter aes-256-cbc decryption password: 123 

Ten openssl używa: libcrypto.so.1.1, libssl.so.1.1

Kiedy próbuję odszyfrować z openssl zainstalowanego na moim Ubuntu, który wykorzystuje: /lib/x86_64-linux-gnu/libssl.so.1.0.0, /lib/x86_64-linux-gnu/libcrypto.so.1.0.0

pojawia się błąd:

[email protected]:~/openssl-1.1.0$ openssl aes-256-cbc -a -d -in file.txt.enc -out file.txt.dec2 
enter aes-256-cbc decryption password: 123 
bad decrypt 
140456117421728:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:539: 

Co może być przyczyną? Dzięki

+0

Podaj swoje wartości testowe, klucz, iv, zwykłe dane, enksryptowane dane tuż przed i po operacjach szyfrowania/odszyfrowywania. Również klucz jest skrótem, AES obsługuje tylko klucze 128, 192 i 256-bitowe, polegasz na dopełnieniu klawiszy, które nie jest częścią standardu AES. – zaph

+1

Stack Overflow to strona z pytaniami do programowania i programowania. To pytanie wydaje się być nie na temat, ponieważ nie chodzi o programowanie czy rozwój. Zobacz [Jakie tematy mogę tu zadać] (http://stackoverflow.com/help/on-topic) w Centrum pomocy. Być może lepszym rozwiązaniem będzie [Super użytkownik] (http://superuser.com/) lub [Unix i Linux Stack Exchange] (http://unix.stackexchange.com/). Zobacz także [Gdzie mogę zamieszczać pytania na temat Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww

Odpowiedz

37

Domyślny skrót został zmieniony z MD5 do SHA256 w OpenSSL 1,1

Spróbuj użyć

[email protected]:~$ echo "it-works!" > file.txt 
[email protected]:~$ LD_LIBRARY_PATH=~/openssl-1.1.0/ openssl-1.1.0/apps/openssl aes-256-cbc -a -salt -in ~/file.txt -out ~/file.txt.enc -md md5 
enter aes-256-cbc encryption password: 
Verifying - enter aes-256-cbc encryption password: 
[email protected]:~$ LD_LIBRARY_PATH=~/openssl-1.0.1f/ openssl-1.0.1f/apps/openssl aes-256-cbc -a -in ~/file.txt.enc -d 
enter aes-256-cbc decryption password: 
it-works! 

brzydki szczegóły -MD MD5:

Wprowadzone hasło nie jest używane jako jest przez aes (lub inne szyfrowanie), ale polecenie domyślnie wyprowadza z niego klucz. Kluczem wyprowadzenie używa skrótu wiadomości, które zostały zmienione w OpenSSL 1.1 Use SHA256 not MD5 as default digest.

W przypadku, gdy chcesz zachować to proste hasło, a nie zacząć brudząc z kluczowania wojennego (-K, -A) po prostu zmusić samo trawienie - md

+3

Spędziłem najlepszą część dnia myśląc, że nasz kod się zepsuł. Natknąłem się na twoją odpowiedź. Uratowałem ten dzień! – starfry

+0

jak wymusić md5 w programie C++? – Adnan

+0

Tak określając digest -md md5 działa jednak lepszym rozwiązaniem jest ponowne szyfrowanie za pomocą -md sha256 (i to samo dla odszyfrowania), które jest bardziej bezpieczne niż md5 stąd zmiana domyślnego skrótu na nowe wersje openssl –

3

testowałem szyfrowanie AES i deszyfrowanie z wersji 1.1.0a (pobranych z openssl.org) oraz wersja 1.0.2g-FIPS (z mojego ubuntu 16.04)

Podczas korzystania z opcji -p na z 2 różne wersje openssl, IV i klucz są różne:

$ LD_LIBRARY_PATH=~/openssl-1.1.0a/ ~/openssl-1.1.0a/apps/openssl aes-256-cbc -a -p -salt -in file -out file.enc 
enter aes-256-cbc encryption password: 
Verifying - enter aes-256-cbc encryption password: 
salt=6A80B2A3B4CFE048 
key=637E17094DF7892A7AFC14957EAA13991DFFD3273A2459EDA613F3AD8A406C38 
iv =6AC7CE5C9AADC6C46C633BF5124DAFBF 

$ openssl aes-256-cbc -a -d -p -in file.enc -out file.dec 
enter aes-256-cbc decryption password: 
salt=6A80B2A3B4CFE048 
key=6220AF2E25CB0B5D9994A0A1B05503D82AC5B0B4C9015E241CACBF8BF62DAC77 
iv =2DC04EF29AA57478EBE606DF87277EA6 
bad decrypt 
140557073118872:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:592: 

podejrzewam inny wyprowadzenie klucz i IV na podstawie soli z wersji 2.

Jeśli chcesz pozbyć się tego błędu deszyfrowania, możesz usunąć opcję -salt i użyć opcji -K dla klucza i -iv w poleceniu openssl.