Який найпростіший спосіб генерувати випадковий хеш (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-хеш - це лише 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
.