2009-01-08 18 views
2

En utilisant PyCrypto (bien que je l'ai essayé cela en ObjC avec les fixations OpenSSL ainsi):Comment puis-je décoder (avec succès) un mot de passe codé à partir de la ligne de commande 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 

émet une valeur codée base64 de:

ESzjTnGMRFnfVOJwQfqtyXOI8yzAatioyufiSdE1dx02McNkZ2IvBg== 

Si vous étiez l'interprète, ICPC vous donner

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

assez facile. Je devrais être en mesure de tuyau cette sortie à OpenSSL et le décoder:

je test pour vous assurer que le décodage B64 fonctionne -

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

Pas assez, mais vous pouvez voir qu'il a obtenu décodé bien " dgb "et" Nq "sont toujours là.

Mais aller pour la chose complète:

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'est-ce que je fais mal? J'ai essayé d'utiliser -k abcdefgh -iv 0000000000000000 ou en tapant le mot de passe de manière interactive - même problème.

Répondre

3

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

6162636465666768 est ASCII "abcdefgh" écrit en hexadécimal. Mais notez que le mode DES en mode ECB n'est probablement pas un bon moyen de coder les mots de passe et qu'il ne s'agit pas de la "crypte DES" que vous avez peut-être entendu utiliser sur les systèmes Unix. (Pour les mots de passe, il est généralement préférable d'utiliser un algorithme dur-à-inverser (vérifier le mot de passe en régénérant le résultat au lieu de déchiffrer le mot de passe stocké.) Même si vous avez besoin de déchiffrer ces mots de passe et surtout la BCE sont de mauvais choix en ce qui concerne la confidentialité.)

+0

Bien sûr, j'allais utiliser Blowfish CBC, j'ai juste saisi l'exemple de code DES pour un test rapide =) Merci pour l'aide! –