Qual é a maneira mais fácil de gerar um hash aleatório (MD5) em Python?
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806
Qual é a maneira mais fácil de gerar um hash aleatório (MD5) em Python?
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806
Respostas:
Um hash md5 é apenas um valor de 128 bits, então se você quiser um aleatório:
import random
hash = random.getrandbits(128)
print("hash value: %032x" % hash)
Eu realmente não vejo o ponto, no entanto. Talvez você deva explicar porque você precisa disso ...
os.urandom
:''.join('%02x' % ord(x) for x in os.urandom(16))
Acho que o que você está procurando é um identificador único universal. Então, o módulo UUID em python é o que você está procurando.
import uuid
uuid.uuid4().hex
UUID4 fornece um identificador único aleatório que tem o mesmo comprimento que uma soma md5. Hex representará is como uma string hexadecimal em vez de retornar um objeto uuid.
Isso funciona para python 2.xe 3.x
import os
import binascii
print(binascii.hexlify(os.urandom(16)))
'4a4d443679ed46f7514ad6dbe3733c3d'
O secrets
módulo foi adicionado no Python 3.6+. Ele fornece valores aleatórios criptograficamente seguros com uma única chamada. As funções têm um nbytes
argumento opcional , o padrão é 32 (bytes * 8 bits = tokens de 256 bits). O MD5 tem hashes de 128 bits, portanto, forneça 16 para tokens "semelhantes ao 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'
Mais uma abordagem. Você não terá que formatar um int para obtê-lo.
import random
import string
def random_string(length):
pool = string.letters + string.digits
return ''.join(random.choice(pool) for i in xrange(length))
Oferece flexibilidade no comprimento da corda.
>>> random_string(64)
'XTgDkdxHK7seEbNDDUim9gUBFiheRLRgg7HyP18j6BZU5Sa7AXiCHP1NEIxuL2s0'
''.join(random.sample(string.ascii_letters + string.digits, 8))
mais pitônico?
Outra abordagem para esta questão 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))
Não estou dizendo que é mais rápido ou preferível a qualquer outra resposta; só que é outra abordagem :)
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)
Também deve ser notado que MD5 é uma função hash muito fraca, também foram encontradas colisões (dois valores de texto simples diferentes resultam no mesmo hash) Basta usar um valor aleatório para plaintext
.