Что такое самый простой способ генерировать случайный хеш (MD5) в Python?
Случайный хеш в Python
Ответ 1
Хэш md5 - это просто 128-битное значение, так что если вы хотите случайное:
import random
hash = random.getrandbits(128)
print("hash value: %032x" % hash)
Хотя я не вижу в этом смысла. Может быть, вам стоит уточнить, зачем вам это нужно...
Ответ 2
Я думаю, что вы ищете универсальный уникальный идентификатор. Тогда модуль UUID в python - это то, что вы ищете.
import uuid
uuid.uuid4().hex
UUID4 дает вам случайный уникальный идентификатор, который имеет ту же длину, что и сумма md5. Hex будет представлять собой шестую строку вместо возврата объекта uuid.
Ответ 3
Это работает как для python 2.x, так и для 3.x
import os
import binascii
print(binascii.hexlify(os.urandom(16)))
'4a4d443679ed46f7514ad6dbe3733c3d'
Ответ 4
Модуль secrets
был добавлен в Python 3. 6+. Он обеспечивает криптографически безопасные случайные значения за один вызов. Функции принимают необязательный аргумент nbytes
, по умолчанию 32 (байты * 8 бит = 256-битные токены). MD5 имеет 128-битные хэши, поэтому предоставьте 16 для "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'
Ответ 5
Еще один подход. Вам не нужно форматировать int, чтобы получить его.
import random
import string
def random_string(length):
pool = string.letters + string.digits
return ''.join(random.choice(pool) for i in xrange(length))
Дает вам гибкость в отношении длины строки.
>>> random_string(64)
'XTgDkdxHK7seEbNDDUim9gUBFiheRLRgg7HyP18j6BZU5Sa7AXiCHP1NEIxuL2s0'
Ответ 6
Другой подход к этому конкретному вопросу:
import random, string
def random_md5like_hash():
available_chars= string.hexdigits[:16]
return ''.join(
random.choice(available_chars)
for dummy in xrange(32))
Я не говорю это быстрее или предпочтительнее любого другого ответа; просто что это другой подход:)
Ответ 7
import uuid
from md5 import md5
print md5(str(uuid.uuid4())).hexdigest()
Ответ 8
import os, hashlib
hashlib.md5(os.urandom(32)).hexdigest()
Ответ 9
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)
Следует также отметить, что MD5 является очень слабой хеш-функцией, также были обнаружены коллизии (два разных значения открытого текста приводят к одному и тому же хешу). Просто используйте случайное значение для plaintext
.