私は 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 バグ トラッカーで Sebastian Andrzej Siewior による回答を見つけました。
ふーん。キーを作成するために、デフォルトのダイジェストが md5 から sha256 に変更されました。1.1. openssl に '-md md5' を追加すれば動作します。逆に、1.0 を正常に動作させるには '-md sha256' が必要です。
したがって、Debian 9 に「-md md5」を追加すると、古い OpenSSL でエンコードされた文字列でも機能します。
# echo "U2FsdGVkX1+I3EBhXjqrm+MJOmKRpj+Y5TtNJaJjI/s=" | openssl des3 -salt -md md5 -a -d -k "testkey"
Hi guys
また、古い Debian に「-md sha256」を追加すると、新しい OpenSSL エンコード文字列も機能します。
# echo "U2FsdGVkX1+p/LDtOotR/gmVTfGL+LabNPvLxKqwbOk=" | openssl des3 -md sha256 -salt -a -d -k "testkey"
Hi guys
他の人の時間を節約するためにスレッドを維持します :)