2011-12-10 2 views
0

J'ai un problème avec ce code:Impossible d'obtenir le hachage() pour travailler en python 3.2.2

print('insert password below to get a hash') 
pass = int(input('Input passowrd> ') 

hash(pass) 
input() 

Je viens d'obtenir une erreur lorsque je tente de lancer, j'ai essayé le help(hash) dans le shell python, lisez les docs, googled autant que possible, mais je ne peux pas le faire fonctionner: -/

Quel est le problème?

+1

Vous devriez nous dire quelle erreur vous obtenez. – middus

+2

J'aime comment personne n'a même mentionné que 'pass' est un mot réservé (et donc pas un identifiant valide). SO le met même en évidence! – delnan

Répondre

3

Je pense que vous avez deux problèmes.


Tout d'abord, un mot de passe est généralement pas un entier de sorte que votre appel à int sera probablement plus une exception soulever.

Vous voulez sans doute ceci:

pass = input('Input password> ') 

En second lieu, la fonction retourne un hashhash code pour l'objet à des fins de comparaison rapide. Ce n'est pas un cryptographic hash function. Envisagez d'utiliser quelque chose comme l'algorithme communément utilisé MD5 ou (de préférence) quelque chose de plus sécurisé comme la famille d'algorithmes SHA-2 à la place.

Vous pouvez utiliser hashlib pour générer des hachages sécurisés de manière cryptographique. Exemple:

>>> import hashlib  
>>> hashlib.md5('admin'.encode('utf-8')).hexdigest() 
'21232f297a57a5a743894a0e4a801fc3' 
>>> hashlib.sha256('admin'.encode('utf-8')).hexdigest() 
'8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918' 

En fonction de vos besoins, vous pouvez également envisager d'utiliser un salt pour protéger davantage le mot de passe.

0

À l'avenir, il serait utile de publier l'erreur que vous obtenez. Je parie que c'est un ValueError qui se plaint que le mot de passe ne peut pas être converti en un int, ce qui est tout à fait correct.

Il ne sert à rien de convertir un entier en premier lieu; hash fonctionne très bien pour les chaînes:

print('Input password below to get a hash:') 
pass = input('Input password> ') 
print(hash(pass)) 
input() 
3

Vos œuvres de code sont écrits, mais il est sans doute pas ce que vous attendiez (le hachage d'un entier est juste l'entier lui-même). Essayez ceci:

print('insert password below to get a hash') 
pass_str = input('Input password: ') 
h = hash(pass_str) 

En outre, si vous stockez des valeurs de hachage pour les mots de passe et que vous voulez qu'il soit sécurisé, assurez-vous d'utiliser un hachage cryptographiquement fort tel que ceux trouvés dans le hashlib module:

>>> pass_str = 'the phrase that pays' 
>>> hashlib.sha256(pass_str.encode()).hexdigest() 
'a91ba2a03eb9772b114e6db5c5a114d8a9b3ba419a64cdde9606a9151c8a352e' 
2

pass est une instruction, vous ne pouvez pas avoir une variable avec ce nom en Python.

>>> pass = 1 
SyntaxError: invalid syntax 
>>> 
Questions connexes