python - example - unicode-objects must be encoded before hashing




Hash aléatoire en Python (6)

Quel est le moyen le plus simple de générer un hachage aléatoire (MD5) en Python?


Cela fonctionne pour python 2.x et 3.x

import os
import binascii
print(binascii.hexlify(os.urandom(16)))
'4a4d443679ed46f7514ad6dbe3733c3d'

Encore une autre approche. Vous n'aurez pas à formater un int pour l'obtenir.

import random
import string

def random_string(length):
    pool = string.letters + string.digits
    return ''.join(random.choice(pool) for i in xrange(length))

Vous donne de la flexibilité sur la longueur de la chaîne.

>>> random_string(64)
'XTgDkdxHK7seEbNDDUim9gUBFiheRLRgg7HyP18j6BZU5Sa7AXiCHP1NEIxuL2s0'

Le module de secrets été ajouté dans Python 3.6+. Il fournit des valeurs aléatoires cryptographiquement sécurisées avec un seul appel. Les fonctions prennent un argument nbytes optionnel, la valeur par défaut est 32 (octets * 8 bits = jetons 256 bits). MD5 a des hachages de 128 bits, donc fournir 16 pour les jetons "MD5-like".

>>> import secrets

>>> secrets.token_hex(nbytes=16)
'17adbcf543e851aa9216acc9d7206b96'

>>> secrets.token_urlsafe(16)
'X7NYIolv893DXLunTzeTIQ'

>>> secrets.token_bytes(128 // 8)
b'\x0b\xdcA\xc0.\x0e\x87\x9b`\x93\\Ev\x1a|u'

Un md5-hash est juste une valeur de 128 bits, donc si vous voulez un aléatoire:

import random

hash = random.getrandbits(128)

print "hash value: %032x" % hash

Je ne vois pas vraiment le point, cependant. Peut-être devriez-vous expliquer pourquoi vous en avez besoin ...


import os, hashlib
hashlib.md5(os.urandom(32)).hexdigest()

import uuid
from md5 import md5

print md5(str(uuid.uuid4())).hexdigest()






md5