Случайно как в чем-нибудь? Или для объекта? Если вам просто нужен случайный MD5, просто выберите несколько чисел.
samoz
Я переименовываю файлы перед загрузкой и хочу, чтобы имя файла было таким: timestamp_randommd5.extension Ура!
mistero
5
Вы можете просто переименовать их в timestamp_randomnumber.ext. На самом деле нет причины, по которой md5 (randomnumber) было бы лучше, чем само randomnumber.
+1 за то, что не вычисляет относительно дорогой хэш из случайного числа: этот подход в 5 раз быстрее.
Николас Дюмазе
11
+1 - конечно, это лучше, чем мой ответ, можно использовать и так: hex (random.getrandbits (128)) [2: -1] это дает тот же результат, что и метод md5 hexdigest.
Jiri
1
вызов random.seed () более или менее бесполезен.
tzot
2
Я бы использовал os.urandom, потому что хеширование MD5 может означать потребность в безопасном.
Неизвестный,
9
Вот как это сделать os.urandom:''.join('%02x' % ord(x) for x in os.urandom(16))
FogleBird
101
Я думаю, что вы ищете универсальный уникальный идентификатор. Тогда UUID модуля в python - это то, что вы ищете.
import uuid
uuid.uuid4().hex
UUID4 дает вам случайный уникальный идентификатор, который имеет ту же длину, что и сумма md5. Hex будет представлять это как шестнадцатеричную строку вместо возврата объекта uuid.
Этот способ шестнадцатеричного кодирования больше не работает в Python 3.
Caramdir
1
Спасибо. это лучший способ сделать случайный хеш-ключ.
Джейк
7
работает для 2.x и 3.x: binascii.hexlify (os.urandom (16))
Clay
44
secretsМодуль был добавлен в Python 3.6 +. Он предоставляет криптографически безопасные случайные значения за один вызов. Функции принимают необязательный nbytesаргумент, по умолчанию - 32 (байты * 8 бит = 256-битные токены). MD5 имеет 128-битные хэши, поэтому предоставьте 16 для «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)
Также следует отметить, что MD5 - очень слабая хеш-функция, также были обнаружены коллизии (два разных значения открытого текста приводят к одному и тому же хешу). Просто используйте случайное значение для plaintext.
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806Ответы:
Md5-hash - это всего лишь 128-битное значение, поэтому, если вам нужно случайное значение:
Хотя я не вижу в этом смысла. Может, тебе стоит уточнить, зачем тебе это нужно ...
источник
os.urandom
:''.join('%02x' % ord(x) for x in os.urandom(16))
Я думаю, что вы ищете универсальный уникальный идентификатор. Тогда UUID модуля в python - это то, что вы ищете.
UUID4 дает вам случайный уникальный идентификатор, который имеет ту же длину, что и сумма md5. Hex будет представлять это как шестнадцатеричную строку вместо возврата объекта uuid.
http://docs.python.org/2/library/uuid.html
источник
Это работает как для python 2.x, так и для 3.x
источник
secrets
Модуль был добавлен в Python 3.6 +. Он предоставляет криптографически безопасные случайные значения за один вызов. Функции принимают необязательныйnbytes
аргумент, по умолчанию - 32 (байты * 8 бит = 256-битные токены). MD5 имеет 128-битные хэши, поэтому предоставьте 16 для «MD5-подобных» токенов.источник
Еще один подход. Вам не нужно форматировать int, чтобы получить его.
Дает вам гибкость в выборе длины струны.
источник
''.join(random.sample(string.ascii_letters + string.digits, 8))
более питонический?Другой подход к этому конкретному вопросу:
Я не говорю, что это быстрее или предпочтительнее любого другого ответа; просто это другой подход :)
источник
источник
источник
Также следует отметить, что MD5 - очень слабая хеш-функция, также были обнаружены коллизии (два разных значения открытого текста приводят к одному и тому же хешу). Просто используйте случайное значение для
plaintext
.источник