Я использую 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
Сохраню тему, чтобы сэкономить время другим ребятам :)