Какой самый простой способ сгенерировать случайный хеш (MD5) в Python?
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806
Какой самый простой способ сгенерировать случайный хеш (MD5) в Python?
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806
Ответы:
Md5-hash - это всего лишь 128-битное значение, поэтому, если вам нужно случайное значение:
import random
hash = random.getrandbits(128)
print("hash value: %032x" % hash)
Хотя я не вижу в этом смысла. Может, тебе стоит уточнить, зачем тебе это нужно ...
os.urandom
:''.join('%02x' % ord(x) for x in os.urandom(16))
Я думаю, что вы ищете универсальный уникальный идентификатор. Тогда UUID модуля в python - это то, что вы ищете.
import uuid
uuid.uuid4().hex
UUID4 дает вам случайный уникальный идентификатор, который имеет ту же длину, что и сумма md5. Hex будет представлять это как шестнадцатеричную строку вместо возврата объекта uuid.
Это работает как для python 2.x, так и для 3.x
import os
import binascii
print(binascii.hexlify(os.urandom(16)))
'4a4d443679ed46f7514ad6dbe3733c3d'
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'
Еще один подход. Вам не нужно форматировать 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'
''.join(random.sample(string.ascii_letters + string.digits, 8))
более питонический?
Другой подход к этому конкретному вопросу:
import random, string
def random_md5like_hash():
available_chars= string.hexdigits[:16]
return ''.join(
random.choice(available_chars)
for dummy in xrange(32))
Я не говорю, что это быстрее или предпочтительнее любого другого ответа; просто это другой подход :)
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
.