¿Aleatorio como en cualquier cosa? ¿O por un objeto? Si solo desea un MD5 aleatorio, elija algunos números.
Samoz
Estoy cambiando el nombre de los archivos antes de cargarlos y quiero un nombre de archivo como este: timestamp_randommd5.extension ¡Salud!
mistero
5
Puede simplemente cambiarles el nombre a timestamp_randomnumber.ext. Realmente no hay una razón por la que md5 (número aleatorio) sea mejor que el propio número aleatorio.
+1 por no calcular un hash relativamente caro a partir de un número aleatorio: este enfoque es 5 veces más rápido.
Nicolas Dumazet
11
+1 - seguramente esto es mejor que mi respuesta, también se puede usar así: hex (random.getrandbits (128)) [2: -1] esto le da el mismo resultado que el método md5 hexdigest.
Jiri
1
la llamada random.seed () es inútil, más o menos.
tzot
2
Yo habría usado os.urandom porque querer un hash MD5 podría significar querer uno seguro.
Desconocido
9
He aquí cómo hacerlo con os.urandom:''.join('%02x' % ord(x) for x in os.urandom(16))
FogleBird
97
Creo que lo que estás buscando es un identificador único universal, entonces el UUID del módulo en python es lo que estás buscando.
import uuid
uuid.uuid4().hex
UUID4 le proporciona un identificador único aleatorio que tiene la misma longitud que una suma md5. Hex representará como una cadena hexadecimal en lugar de devolver un objeto uuid.
Esta forma de codificación hexadecimal ya no funciona en Python 3.
Caramdir
1
Gracias. esta es la mejor manera de hacer una clave hash aleatoria.
Jake
7
funciona para 2.xy 3.x: binascii.hexlify (os.urandom (16))
Clay
44
El secretsmódulo se agregó en Python 3.6+. Proporciona valores aleatorios criptográficamente seguros con una sola llamada. Las funciones toman un nbytesargumento opcional , el valor predeterminado es 32 (bytes * 8 bits = tokens de 256 bits). MD5 tiene hashes de 128 bits, así que proporcione 16 para los tokens "similares a MD5".
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)
También debe tenerse en cuenta que MD5 es una función hash muy débil, también se han encontrado colisiones (dos valores de texto plano diferentes dan como resultado el mismo hash). Solo use un valor aleatorio para plaintext.
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806Respuestas:
Un hash md5 es solo un valor de 128 bits, por lo que si desea uno aleatorio:
Sin embargo, realmente no veo el punto. Tal vez deberías explicar por qué necesitas esto ...
fuente
os.urandom
:''.join('%02x' % ord(x) for x in os.urandom(16))
Creo que lo que estás buscando es un identificador único universal, entonces el UUID del módulo en python es lo que estás buscando.
UUID4 le proporciona un identificador único aleatorio que tiene la misma longitud que una suma md5. Hex representará como una cadena hexadecimal en lugar de devolver un objeto uuid.
http://docs.python.org/2/library/uuid.html
fuente
Esto funciona tanto para python 2.xy 3.x
fuente
El
secrets
módulo se agregó en Python 3.6+. Proporciona valores aleatorios criptográficamente seguros con una sola llamada. Las funciones toman unnbytes
argumento opcional , el valor predeterminado es 32 (bytes * 8 bits = tokens de 256 bits). MD5 tiene hashes de 128 bits, así que proporcione 16 para los tokens "similares a MD5".fuente
Otro enfoque más. No tendrá que formatear un int para obtenerlo.
Le da flexibilidad en la longitud de la cuerda.
fuente
''.join(random.sample(string.ascii_letters + string.digits, 8))
más pitónico?Otro enfoque para esta pregunta específica:
No digo que sea más rápido o preferible a cualquier otra respuesta; solo que es otro enfoque :)
fuente
fuente
fuente
También debe tenerse en cuenta que MD5 es una función hash muy débil, también se han encontrado colisiones (dos valores de texto plano diferentes dan como resultado el mismo hash). Solo use un valor aleatorio para
plaintext
.fuente