J'utilise sqlite avec python. J'implémente le protocole POP3. J'ai une tableComparaison des valeurs SQL
msg_id text date text from_sender text subject text body text hashkey text
Maintenant je dois vérifier les messages en double en vérifiant l'identifiant de message du message récupéré contre les années MSG_ID existantes dans le tableau. J'ai crypté le msg_id en utilisant md5 et l'ai mis dans la colonne hashkey. Chaque fois que je récupère du courrier, je hache l'ID du message et le vérifie avec les valeurs de la table. Heres ce que je fais.
def check_duplicate(new): conn = sql.connect("mail") c = conn.cursor() m = hashlib.md5() m.update(new) c.execute("select hashkey from mail") for row in c: if m.hexdigest() == row: return 0 else: continue return 1
Il refuse simplement de fonctionner correctement. J'ai essayé d'imprimer la valeur de rangée, elle le montre en unicode, c'est où le problème réside car il ne peut pas comparer correctement.
Existe-t-il une meilleure façon de faire ou d'améliorer ma méthode?
Juste curieux - pourquoi vous hashing le champ msg_id avant de faire la comparaison? Y at-il une raison pour laquelle vous ne pouvez pas comparer les msg_id? –
@Bob: O (1) pour chaque comparaison avec les chaînes existantes de la table. (Au lieu de O (n).) Ceci est connu comme des chaînes d'internement, voir: http://en.wikipedia.org/wiki/String_interning. –
Aussi: MD5 est un algorithme de hachage, pas de "cryptage". Vous êtes hashing the 'msg_id', ne pas le chiffrer. –