Aleatório para alguma coisa? Ou por um objeto? Se você quiser apenas um MD5 aleatório, basta escolher alguns números.
samoz
Estou renomeando os arquivos antes de enviar e quero um nome como este: timestamp_randommd5.extension Cheers!
mistero
5
Você pode simplesmente renomeá-los para timestamp_randomnumber.ext. Não há realmente uma razão para que md5 (número aleatório) seja melhor do que o próprio número aleatório.
+1 para não computar um hash relativamente caro de um número aleatório: esta abordagem é 5x mais rápida.
Nicolas Dumazet
11
+1 - certamente isso é melhor do que minha resposta, também pode ser usado assim: hex (random.getrandbits (128)) [2: -1] isso dá a mesma saída que o método md5 hexdigest.
Jiri
1
a chamada random.seed () é mais ou menos inútil.
tzot
2
Eu teria usado os.urandom porque querer um hash MD5 pode significar querer um seguro.
Desconhecido
9
Veja como fazer isso com os.urandom:''.join('%02x' % ord(x) for x in os.urandom(16))
FogleBird
97
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.
Esta forma de codificação hexadecimal não funciona mais no Python 3.
Caramdir,
1
obrigado. esta é a melhor maneira de criar uma chave hash aleatória.
Jake
7
funciona para 2.xe 3.x: binascii.hexlify (os.urandom (16))
Clay
44
O secretsmódulo foi adicionado no Python 3.6+. Ele fornece valores aleatórios criptograficamente seguros com uma única chamada. As funções têm um nbytesargumento 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".
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.
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806Respostas:
Um hash md5 é apenas um valor de 128 bits, então se você quiser um aleatório:
Eu realmente não vejo o ponto, no entanto. Talvez você deva explicar porque você precisa disso ...
fonte
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.
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.
http://docs.python.org/2/library/uuid.html
fonte
Isso funciona para python 2.xe 3.x
fonte
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 umnbytes
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".fonte
Mais uma abordagem. Você não terá que formatar um int para obtê-lo.
Oferece flexibilidade no comprimento da corda.
fonte
''.join(random.sample(string.ascii_letters + string.digits, 8))
mais pitônico?Outra abordagem para esta questão específica:
Não estou dizendo que é mais rápido ou preferível a qualquer outra resposta; só que é outra abordagem :)
fonte
fonte
fonte
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
.fonte