¿Cómo decodifico (con éxito) una contraseña codificada desde la línea de comandos openSSL?

StackOverflow https://stackoverflow.com/questions/426294

Pregunta

Uso de PyCrypto (aunque también he intentado esto en ObjC con enlaces 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

genera un valor codificado en base64 de:

ESzjTnGMRFnfVOJwQfqtyXOI8yzAatioyufiSdE1dx02McNkZ2IvBg==

Si estuvieras en el intérprete, ciph te dará

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

Suficientemente fácil. Debería poder canalizar esta salida a OpenSSL y decodificarla:

Pruebo para asegurarme de que la decodificación b64 funciona -

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

No es bonito, pero puedes ver que se decodificó bien, "dgb" y '' Nq '' siguen ahí.

Pero ve por todo:

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?

¿Qué estoy haciendo mal? Intenté usar -k abcdefgh -iv 0000000000000000 o escribir la contraseña de forma interactiva, el mismo problema.

¿Fue útil?

Solución

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

6162636465666768 es el ASCII "abcdefgh" escrito en hexadecimal.

Pero tenga en cuenta que DES en modo ECB probablemente no sea una buena forma de codificar contraseñas y tampoco es la "cripta DES" Es posible que haya oído hablar de su uso en sistemas Unix. (Para las contraseñas, generalmente es mejor utilizar un algoritmo difícil de revertir (verificando la contraseña regenerando el resultado en lugar de descifrar la contraseña almacenada). Incluso si necesita poder descifrar estas contraseñas cifradas, Single-DES y especialmente el BCE son malas elecciones en lo que respecta a la confidencialidad).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top