2017-10-17 4 views
0

quand j'utiliser la commande shell:echo -n "mot de passe" | OpenSSL dgst -md5 -binary | openssl enc -base64

echo -n "password"|openssl dgst -md5 -binary|openssl enc -base64 

Le résultat est: X03MO1qnZdYdgyfeuILPmQ ==

mais, comment puis-je faire python3

import base64, sys, hashlib 
text = "password" 
try: 
    text = bytes(text, 'utf-8') 
except: 
    pass 
auth = str.encode(hashlib.md5(text).hexdigest()) 
query = base64.b64encode(auth) 
print(query) 

Le résultat est différent: NWY0ZGNjM2I1YWE3NjVkNjFkODMyN2RlYjg4MmNmOTk =

+0

Lors de l'enregistrement d'un mot de passe vérificateur juste en utilisant une fonction de hachage ne suffit pas et le simple ajout d'un sel ne contribue guère à améliorer la sécurité. Au lieu de itérer sur un HMAC avec un sel aléatoire pour une durée d'environ 100ms et enregistrer le sel avec le hachage. Mieux encore, utilisez une fonction telle que 'PBKDF2',' Rfc2898DeriveBytes', 'password_hash',' Bcrypt', 'passlib.hash' ou des fonctions similaires. Le but est que l'attaquant passe beaucoup de temps à trouver des mots de passe par force brute. – zaph

Répondre

0

Vous demandez t Il digère la sortie au format binaire en passant l'option '-binary' à openssl. Vous devez donc également gérer les données binaires dans python. Il suffit d'utiliser la méthode digest() au lieu de hexdigest():

import base64, sys, hashlib 
text = "password" 
try: 
    text = bytes(text, 'utf-8') 
except: 
    pass 
auth = hashlib.md5(text).digest() 
query = base64.b64encode(auth) 
print(query.decode()) 
+0

Cela fonctionne bien. Merci beaucoup. – joyesong