Как мне (успешно) декодировать закодированный пароль из командной строки openSSL?

Использование PyCrypto (хотя я пробовал это и в ObjC с привязками OpenSSL):

from Crypto.Cipher import DES
import base64
obj=DES.new('abcdefgh', DES.MODE_ECB)
plain="Guido van Rossum is a space alien.XXXXXX"
ciph=obj.encrypt(plain)
enc=base64.b64encode(ciph)
#print ciph
print enc

выводит значение в кодировке base64:

ESzjTnGMRFnfVOJwQfqtyXOI8yzAatioyufiSdE1dx02McNkZ2IvBg==

Если вы были в интерпретаторе, шифр даст вам

'\x11,\xe3Nq\x8cDY\xdfT\xe2pA\xfa\xad\xc9s\x88\xf3,\xc0j\xd8\xa8\xca\xe7\xe2I\xd15w\x1d61\xc3dgb/\x06'

Достаточно легко. Я должен иметь возможность передать этот вывод в OpenSSL и декодировать его:

Я тестирую, чтобы убедиться, что декодирование b64 работает -

python enctest.py | openssl enc -base64 -d
+ python enctest.py
+ openssl enc -base64 -d
,?Nq?DY?T?pA???s??,?jب???I?5w61?dgb/

Некрасиво, но видно, что декодировалось нормально, "dgb" и "Nq" все еще там.

Но идите по полной:

python enctest.py | openssl enc -base64 -d | openssl enc -nosalt -des-ecb -d -pass pass:abcdefgh
+ python enctest.py
+ openssl enc -nosalt -des-ecb -d -pass pass:abcdefgh
+ openssl enc -base64 -d
bad decrypt
15621:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:461:
j?7????vc]???LE?m³??q?

Что я делаю не так? Я пробовал использовать -k abcdefgh -iv 0000000000000000 или вводить пароль в интерактивном режиме - та же проблема.


person Rizwan Kassim    schedule 08.01.2009    source источник


Ответы (1)


echo ESzjTnGMRFnfVOJwQfqtyXOI8yzAatioyufiSdE1dx02McNkZ2IvBg== | openssl enc -nopad -a -des-ecb -K 6162636465666768 -iv 0 -p -d

6162636465666768 - это ASCII "abcdefgh", записанный в шестнадцатеричном формате.

Но обратите внимание, что DES в режиме ECB, вероятно, не является хорошим способом кодирования паролей, а также не является «шифрованием DES», о котором вы, возможно, слышали, об использовании в системах Unix. (Для паролей обычно лучше использовать труднообратимый алгоритм (проверка пароля путем повторного создания результата вместо расшифровки сохраненного пароля). Даже если вам действительно нужно расшифровать эти зашифрованные пароли, особенно ECB - плохой выбор с точки зрения конфиденциальности.)

person woggle    schedule 09.01.2009
comment
Конечно, я собирался использовать Blowfish CBC, я просто взял образец кода DES для быстрого теста =) Спасибо за помощь! - person Rizwan Kassim; 10.01.2009