Al azar de hash en Python

¿Cuál es la más fácil forma de generar un azar de hash (MD5) en Python?

  • Azar por nada? O de un objeto? Si lo que desea es una aleatorios MD5, acaba de recoger algunos de los números.
  • Yo soy el cambio de nombre de los archivos antes de subirlos y quiero un nombre de archivo como este: timestamp_randommd5.extensión Saludos!
  • Usted puede simplemente cambiar el nombre de ellos para timestamp_randomnumber.ext. No hay realmente una razón por la que md5(randomnumber) sería mejor que randomnumber sí mismo.
  • la mejor respuesta para Python 3 es el último import uuid; uuid.uuid().hex stackoverflow.com/a/20060712/3218806
InformationsquelleAutor mistero | 2009-06-10

9 Kommentare

  1. 123

    Un md5 hash es sólo un valor de 128 bits, así que si quieres uno aleatorio:

    import random
    
    hash = random.getrandbits(128)
    
    print("hash value: %032x" % hash)

    Yo realmente no veo el punto, sin embargo. Tal vez usted debe explicar en detalle por qué necesita esta…

    • +1 para que no se de computación relativamente caro hash a partir de un número aleatorio: este enfoque es 5 veces más rápido.
    • +1 – sin duda, este es mejor que el de mi respuesta, puede ser utilizado también como este: hex(al azar.getrandbits(128))[2:-1] esto le da a usted la misma salida que en md5 hexdigest método.
    • el azar.semilla() la llamada es inútil, más o menos.
    • Yo he utilizado sistema operativo.urandom porque querer un hash MD5 podría significar querer una segura.
    • Buen uso de la hexagonal de la especificación de formato para imprimir. +1
    • Aquí está cómo hacerlo con os.urandom: ''.join('%02x' % ord(x) for x in os.urandom(16))
    • hex(al azar.getrandbits(128))[2:-1] a veces le da un 31 caracteres de la cadena (se espera 32 todos los tiempos).

  2. 83

    Creo que lo que usted está buscando es un identificador único universal.A continuación, el módulo de UUID en python es lo que usted está buscando.

    import uuid
    uuid.uuid4().hex

    UUID4 le da una al azar identificador único que tiene la misma longitud que una suma md5. Hex se representan como una cadena hexadecimal en lugar de devolver un uuid objeto.

    http://docs.python.org/2/library/uuid.html

  3. 44

    Esto funciona tanto para python 2.x y 3.x

    import os
    import binascii
    print(binascii.hexlify(os.urandom(16)))
    '4a4d443679ed46f7514ad6dbe3733c3d'
    • Esta forma de codificación hexadecimal no funciona en Python 3 más.
    • gracias. esta es la mejor manera de hacer un random de clave hash.
    • funciona para los 2.x y 3.x: binascii.hexlify(os.urandom(16))
  4. 32

    La secretos módulo fue añadido en Python 3.6+. Proporciona valores aleatorios criptográficamente segura con una sola llamada. Las funciones toman un opcional nbytes argumento, el valor predeterminado es 32 (bytes * 8 bits = 256-bit tokens). MD5 tiene 128 bits hash, por lo que proporcionan 16 para «MD5» como los tokens.

    >>> 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'
  5. 16

    Otro enfoque. Usted no tiene que dar formato a un int para conseguirlo.

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

    Le da la flexibilidad de la longitud de la cadena.

    >>> random_string(64)
    'XTgDkdxHK7seEbNDDUim9gUBFiheRLRgg7HyP18j6BZU5Sa7AXiCHP1NEIxuL2s0'
    • Probablemente voy a cambiar de cadena.cartas a ‘abcdf’ para reflejar dígitos hexadecimales. Pero la gran solución!
  6. 6

    Otro enfoque a esta pregunta específica:

    import random, string
    
    def random_md5like_hash():
        available_chars= string.hexdigits[:16]
        return ''.join(
            random.choice(available_chars)
            for dummy in xrange(32))

    No estoy diciendo que es más rápido o preferible a cualquier otra respuesta; sólo que es otro enfoque 🙂

  7. 0
    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 se debe señalar que el MD5 es un muy débil, la función de hash, también las colisiones se han encontrado (dos diferentes plaintext valores de resultado en el mismo hash)
    Sólo tiene que utilizar un valor aleatorio para plaintext.

    • Necesidad de que el usuario de entrada no ayuda con el «más fácil» aspecto de la pregunta original…
    • ¿Has comprobado tu código? Le falta un paréntesis en la línea 3.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea