Quelle est la façon la plus simple de générer un hachage aléatoire (MD5) en Python?
Un hachage md5 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. Vous devriez peut-être expliquer pourquoi vous en avez besoin ...
Je pense que ce que vous recherchez est un identifiant unique universel. Ensuite, le module UUID dans python est ce que vous recherchez.
import uuid
uuid.uuid4().hex
UUID4 vous donne un identifiant unique aléatoire qui a la même longueur qu'une somme md5. Hex représentera une chaîne hexadécimale au lieu de renvoyer un objet uuid.
Cela fonctionne pour les deux python 2.x et 3.x
import os
import binascii
print(binascii.hexlify(os.urandom(16)))
'4a4d443679ed46f7514ad6dbe3733c3d'
Le module secrets
a été ajouté dans Python 3.6+. Il fournit des valeurs aléatoires cryptographiquement sécurisées avec un seul appel. Les fonctions prennent une option nbytes
argument, la valeur par défaut est 32 (octets * 8 bits = jetons 256 bits). MD5 a des hachages 128 bits, donc fournissez 16 pour les jetons "de type MD5".
>>> 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'
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 une flexibilité sur la longueur de la chaîne.
>>> random_string(64)
'XTgDkdxHK7seEbNDDUim9gUBFiheRLRgg7HyP18j6BZU5Sa7AXiCHP1NEIxuL2s0'
Une autre approche de cette question spécifique:
import random, string
def random_md5like_hash():
available_chars= string.hexdigits[:16]
return ''.join(
random.choice(available_chars)
for dummy in xrange(32))
Je ne dis pas que c'est plus rapide ou préférable à toute autre réponse; juste que c'est ne autre approche :)
import uuid
from md5 import md5
print md5(str(uuid.uuid4())).hexdigest()
import os, hashlib
hashlib.md5(os.urandom(32)).hexdigest()
from hashlib import md5
plaintext = input('Enter the plaintext data to be hashed: ') # Must be a string, doesn't need to have utf-8 encoding
ciphertext = md5(plaintext.encode('utf-8').hexdigest())
print(ciphertext)
Il convient également de noter que MD5 est une fonction de hachage très faible, des collisions ont également été trouvées (deux valeurs de texte en clair différentes donnent le même hachage) Utilisez simplement une valeur aléatoire pour plaintext
.