Quelle est la manière la plus simple de générer un hachage aléatoire (MD5) en Python?
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806
Quelle est la manière la plus simple de générer un hachage aléatoire (MD5) en Python?
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806
Réponses:
Un hachage md5 est juste une valeur de 128 bits, donc si vous voulez une valeur aléatoire:
import random
hash = random.getrandbits(128)
print("hash value: %032x" % hash)
Je ne vois pas vraiment l'intérêt, cependant. Peut-être devriez-vous expliquer pourquoi vous en avez besoin ...
os.urandom
:''.join('%02x' % ord(x) for x in os.urandom(16))
Je pense que ce que vous recherchez est un identifiant unique universel, alors le module UUID en 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 est une chaîne hexadécimale au lieu de renvoyer un objet uuid.
Cela fonctionne pour python 2.x et 3.x
import os
import binascii
print(binascii.hexlify(os.urandom(16)))
'4a4d443679ed46f7514ad6dbe3733c3d'
Le secrets
module a été ajouté dans Python 3.6+. Il fournit des valeurs aléatoires sécurisées par cryptographie en un seul appel. Les fonctions prennent un nbytes
argument facultatif , la valeur par défaut est de 32 (octets * 8 bits = jetons de 256 bits). MD5 a des hachages de 128 bits, alors 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 corde.
>>> random_string(64)
'XTgDkdxHK7seEbNDDUim9gUBFiheRLRgg7HyP18j6BZU5Sa7AXiCHP1NEIxuL2s0'
''.join(random.sample(string.ascii_letters + string.digits, 8))
plus pythonique?
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 une autre approche :)
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 brut différentes donnent le même hachage) Utilisez simplement une valeur aléatoire pour plaintext
.