Python'da rastgele bir hash (MD5) oluşturmanın en kolay yolu nedir ?
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806
Python'da rastgele bir hash (MD5) oluşturmanın en kolay yolu nedir ?
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806
Yanıtlar:
Bir md5 hash değeri yalnızca 128 bitlik bir değerdir, bu nedenle rastgele bir tane istiyorsanız:
import random
hash = random.getrandbits(128)
print("hash value: %032x" % hash)
Yine de asıl noktayı görmüyorum. Belki de buna neden ihtiyacın olduğunu açıklamalısın ...
os.urandom
:''.join('%02x' % ord(x) for x in os.urandom(16))
Sanırım aradığınız evrensel benzersiz bir tanımlayıcı. Python'daki UUID modülü aradığınız şeydir.
import uuid
uuid.uuid4().hex
UUID4, md5 toplamı ile aynı uzunluğa sahip rastgele benzersiz bir tanımlayıcı verir. Hex, bir uuid nesnesi döndürmek yerine onaltılık bir dizedir.
Bu hem python 2.x hem de 3.x için çalışır
import os
import binascii
print(binascii.hexlify(os.urandom(16)))
'4a4d443679ed46f7514ad6dbe3733c3d'
secrets
Modül Python 3.6+ yılında eklenmiştir. Tek bir çağrı ile kriptografik olarak güvenli rasgele değerler sağlar. Fonksiyonlar isteğe bağlı bir nbytes
argüman alır, varsayılan 32'dir (bayt * 8 bit = 256 bit belirteç). MD5, 128 bitlik karmalara sahiptir, bu nedenle "MD5 benzeri" simgeler için 16 sağlayın.
>>> 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'
Yine başka bir yaklaşım. Bir int'i elde etmek için biçimlendirmeniz gerekmeyecek.
import random
import string
def random_string(length):
pool = string.letters + string.digits
return ''.join(random.choice(pool) for i in xrange(length))
İpin uzunluğu konusunda size esneklik sağlar.
>>> random_string(64)
'XTgDkdxHK7seEbNDDUim9gUBFiheRLRgg7HyP18j6BZU5Sa7AXiCHP1NEIxuL2s0'
''.join(random.sample(string.ascii_letters + string.digits, 8))
daha pitonik?
Bu özel soruya başka bir yaklaşım:
import random, string
def random_md5like_hash():
available_chars= string.hexdigits[:16]
return ''.join(
random.choice(available_chars)
for dummy in xrange(32))
Başka bir cevaba göre daha hızlı ya da tercih edilir demiyorum; sadece başka bir yaklaşım :)
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'in çok zayıf bir hash fonksiyonu olduğu da unutulmamalıdır, ayrıca çarpışmalar da bulunmuştur (iki farklı düz metin değeri aynı hash ile sonuçlanır) Sadece için rastgele bir değer kullanın plaintext
.