8 ответов:
md5-хэш-это просто 128-битное значение, поэтому, если вы хотите случайный:
import random hash = random.getrandbits(128) print "hash value: %032x" % hashЯ действительно не вижу смысла, хотя. Может быть, вы должны уточнить, зачем вам это нужно...
Я думаю, что вы ищете универсальный уникальный идентификатор.Тогда модуль UUID в python - это то, что вы ищете.
import uuid uuid.uuid4().hexUUID4 дает вам случайный уникальный идентификатор, который имеет ту же длину, что и сумма md5. Наговор будет представлять как шестнадцатеричную строку вместо того, чтобы возвращать объект типа UUID.
это работает для обоих python 2.x и 3.x
import os import binascii print(binascii.hexlify(os.urandom(16))) '4a4d443679ed46f7514ad6dbe3733c3d'
The
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'
другой подход к этому конкретному вопросу:
import random, string def random_md5like_hash(): available_chars= string.hexdigits[:16] return ''.join( random.choice(available_chars) for dummy in xrange(32))Я не говорю, что это быстрее или предпочтительнее любого другого ответа; просто это другое подход :)
Comments