OpenSSL плохо расшифровывает между 0.9.8o и 1.1.0f

OpenSSL плохо расшифровывает между 0.9.8o и 1.1.0f

Я использую OpenSSL для кодирования открытого текста и его декодирования на нескольких удаленных серверах. Пока я тестировал свои скрипты, чтобы убедиться в совместимости с Debian 9 Stretch, я обнаружил ошибку.

Вот как я тестирую: Debian 6, OpenSSL 0.9.8o, кодирование строки:

# echo "Hi guys" | openssl des3 -salt -a -k "testkey"
U2FsdGVkX1+I3EBhXjqrm+MJOmKRpj+Y5TtNJaJjI/s=

Расшифровка на том же сервере:

# echo "U2FsdGVkX1+I3EBhXjqrm+MJOmKRpj+Y5TtNJaJjI/s=" | openssl des3 -salt -a -d -k "testkey"
Hi guys

Debian 9, OpenSSL 1.1.0f, расшифровка строки:

# echo "U2FsdGVkX1+I3EBhXjqrm+MJOmKRpj+Y5TtNJaJjI/s=" | openssl des3 -salt -a -d -k "testkey"
bad decrypt
140259873273088:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:../crypto/evp/evp_enc.c:535:
z���AR�

Пока идет работа над декодированием:

Debian 7, OpenSSL 1.0.1t:

$ echo "U2FsdGVkX1+I3EBhXjqrm+MJOmKRpj+Y5TtNJaJjI/s=" | openssl des3 -salt -a -d -k "testkey"
Hi guys

Debian 8, OpenSSL 1.0.1t

# echo "U2FsdGVkX1+I3EBhXjqrm+MJOmKRpj+Y5TtNJaJjI/s=" | openssl des3 -salt -a -d -k "testkey"
Hi guys

Итак, я протестировал кодирование на тестовом сервере Debian 9 OpenSSL 1.1.0f:

# echo "Hi guys" | openssl des3 -salt -a -k "testkey"
U2FsdGVkX1+p/LDtOotR/gmVTfGL+LabNPvLxKqwbOk=

И декодирование на том же сервере работает:

# echo "U2FsdGVkX1+p/LDtOotR/gmVTfGL+LabNPvLxKqwbOk=" | openssl des3 -salt -a -d -k "testkey"
Hi guys

Но декодирование не работает на 3 других серверах: Debian 6, OpenSSL 0.9.8o:

# echo "U2FsdGVkX1+p/LDtOotR/gmVTfGL+LabNPvLxKqwbOk=" | openssl des3 -salt -a -d -k "testkey"
bad decrypt
12605:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:330:
��Rv��

Debian 7, OpenSSL 1.0.1t:

$ echo "U2FsdGVkX1+p/LDtOotR/gmVTfGL+LabNPvLxKqwbOk=" | openssl des3 -salt -a -d -k "testkey"
bad decrypt
139771367589544:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:516:
▒▒Rv▒▒

Debian 8, OpenSSL 1.0.1t:

# echo "U2FsdGVkX1+p/LDtOotR/gmVTfGL+LabNPvLxKqwbOk=" | openssl des3 -salt -a -d -k "testkey"
bad decrypt
139719827605136:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:516:
▒▒Rv▒▒

Я проверил зависимости OpenSSL и протестировал каждую версию на нескольких серверах.

решение1

Извините, ребята, через несколько минут я нашел ответ на Debian bug tracker от Sebastian Andrzej Siewior:

Отчет об ошибке Debian #843064

ба. Они изменили дайджест по умолчанию с md5 на sha256 для создания ключа. Если вы добавите '-md md5' к вашему 1.1. openssl, то это сработает. Наоборот, вам нужно '-md sha256', чтобы 1.0 был счастлив.

Таким образом, добавление «-md md5» в Debian 9 работает со старыми строками, закодированными OpenSSL:

# echo "U2FsdGVkX1+I3EBhXjqrm+MJOmKRpj+Y5TtNJaJjI/s=" | openssl des3 -salt -md md5 -a -d -k "testkey"
Hi guys

А если добавить «-md sha256» в старом Debian, то новая закодированная строка OpenSSL тоже будет работать:

# echo "U2FsdGVkX1+p/LDtOotR/gmVTfGL+LabNPvLxKqwbOk=" | openssl des3 -md sha256 -salt -a -d -k "testkey"
Hi guys

Сохраню тему, чтобы сэкономить время другим ребятам :)

Связанный контент