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

抱歉大家,幾分鐘後我在 Sebastian Andrzej Siewior 的 Debian bug tracker 上找到了答案:

Debian 錯誤回報#843064

呸。他們將預設摘要從 md5 更改為 sha256 以建立密鑰。如果您將「-md md5」新增至 1.1. openssl 然後它就可以工作了。相反,你需要「-md sha256」來保持 1.0 的正常運作。

因此,透過在 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

保留線程以節省其他人的時間:)

相關內容