hashlib.md5() TypeError: Unicode-les objets doivent être codées avant le hachage
Je suis nouveau sur le codage et ont couru dans un problème d'essayer de coder une chaîne de caractères.
>>> import hashlib
>>> a = hashlib.md5()
>>> a.update('hi')
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
a.update('hi')
TypeError: Unicode-objects must be encoded before hashing
>>> a.digest()
b'\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04\xe9\x80\t\x98\xec\xf8B~'
(A) est maintenant considéré comme être codé?
Deuxième question: Lorsque j'exécute le code ci-dessus dans un script, j'obtiens cette erreur:
import hashlib
a = hashlib.md5()
a.update('hi')
a.digest()
Traceback (most recent call last):
Fichier "C:/Users/User/Desktop/Logger/Encoding practice.py", ligne 3, dans
un.mise à jour ("salut")
TypeError: Unicode-les objets doivent être codées avant le hachage
Pourquoi le code de travail dans la coquille et non le script?
Je travaille avec Windows et Python 3.4
Grâce.
OriginalL'auteur Shahab | 2014-12-17
Vous devez vous connecter pour publier un commentaire.
Depuis l'encodage simple des chaînes-je en déduire que vous êtes en cours d'exécution Python 3, où toutes les chaînes de caractères sont des objets unicode, vous avez deux options:
"Nobody inspects".encode('utf-8')
Utilisation de chaînes binaires comme indiqué dans les manuels:
La raison de la différence de comportement dans le script pour la coquille, c'est que le script s'arrête sur l'erreur alors que dans le shell de la dernière ligne est une commande distincte, mais toujours pas à faire ce que vous désirez en raison de l'erreur précédente.
OriginalL'auteur Steve Barnes
La solution que j'ai trouvé est tout simplement de coder les données d'emblée dans la ligne où vous êtes le hachage:
hashlib.sha256("a".encode('utf-8')).hexdigest()
Il a travaillé pour moi, j'espère que ça aide!
OriginalL'auteur Matej Butković
Sous les différentes versions de Python est différent,j'utilise Python 2.7,même comme vous l'écrivez, il fonctionne bien.
hashlib.md5(données) de la fonction, le type de données de paramètres doivent être octets.C'est-à-dire, nous devons mettre le type de données en octets avant de hachages.
Exigences avant que le code de hachage de conversion, parce que la même chaîne ont des valeurs différentes sous différents systèmes de codage(utf8\gbk.....), afin de s'assurer de ne pas arriver ambiguïté doit être une dominante de conversion.
OriginalL'auteur NeoWu
Il ne fonctionne pas dans le REPL. Il est haché rien, puisque vous avez passé rien de valable de hachage. Essayez d'encodage en premier.
OriginalL'auteur Ignacio Vazquez-Abrams