Je travaille sur un projet python dans 2.6 qui a aussi un support pour le fonctionnement de python 3. Je travaille spécifiquement sur un algorithme digest-md5.Python: concaténation d'octets avec une chaîne
En Python 2.6 sans courir cette importation:
from __future__ import unicode_literals
Je suis capable d'écrire un morceau de code tel que ceci:
a1 = hashlib.md5("%s:%s:%s" % (self.username, self.domain, self.password)).digest()
a1 = "%s:%s:%s" %(a1, challenge["nonce"], cnonce)
sans aucun problème, mon authentification fonctionne très bien. Lorsque je tente la même ligne de code avec les unicode_literals Importé je reçois une exception:
UnicodeDecodeError: « utf8 » codec ne peut pas décoder 0xA8 octet en position 0: le code inattendu octet
Maintenant, je suis relativement nouveau à python, donc je suis un peu coincé à comprendre cela. si je remplace le% s dans la chaîne de formatage par% r, je suis capable de concaténer la chaîne, mais l'authentification ne fonctionne pas. La spécification digest-md5 que j'avais lue indique que le condensé binaire de 16 octets doit être ajouté à ces autres chaînes.
Des pensées?
Python 3.x sépare clairement les chaînes des tableaux d'octets. En fonction de vos besoins, il peut être utile de rajouter les motifs '"% s:% s:% s "' avec 'b' pour obtenir un tableau d'octets, mais cela risque de donner de mauvais résultats. Quel est le but de ce code de toute façon? – Philipp
Ceci est un extrait d'un plus gros morceau de code qui est utilisé pour un algorithme digest-md5 que j'utilise pour s'authentifier auprès d'un serveur xmpp, et c'est le morceau de code spécifique qui me cause quelques problèmes. En attente de la chaîne de formatage avec b provoque toujours le même problème. Voici quelques informations sur la création d'un digest-md5 http://web.archive.org/web/20050224191820/http://cataclysm.cx/wip/digest-md5-crash.html – Macdiesel