पायथन में एक यादृच्छिक हैश (MD5) उत्पन्न करने का सबसे आसान तरीका क्या है ?
import uuid; uuid.uuid().hex
stackoverflow.com/a/20060712/3218806
पायथन में एक यादृच्छिक हैश (MD5) उत्पन्न करने का सबसे आसान तरीका क्या है ?
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))
मुझे लगता है कि आप जो देख रहे हैं वह एक सार्वभौमिक विशिष्ट पहचानकर्ता है। अजगर में मॉड्यूल यूयूआईडी वह है जो आप खोज रहे हैं।
import uuid
uuid.uuid4().hex
UUID4 आपको एक यादृच्छिक विशिष्ट पहचानकर्ता देता है जिसकी लंबाई md5 योग के समान है। हेक्स का प्रतिनिधित्व करेगा एक यूआईडी ऑब्जेक्ट लौटने के बजाय एक हेक्स स्ट्रिंग के रूप में।
यह अजगर 2.x और 3.x दोनों के लिए काम करता है
import os
import binascii
print(binascii.hexlify(os.urandom(16)))
'4a4d443679ed46f7514ad6dbe3733c3d'
secrets
मॉड्यूल अजगर 3.6+ में जोड़ा गया है। यह एकल कॉल के साथ क्रिप्टोग्राफिक रूप से सुरक्षित यादृच्छिक मान प्रदान करता है। फ़ंक्शन एक वैकल्पिक nbytes
तर्क लेते हैं , डिफ़ॉल्ट 32 है (बाइट्स * 8 बिट्स = 256-बिट टोकन)। MD5 में 128-बिट हैश है, इसलिए "MD5-like" टोकन के लिए 16 प्रदान करें।
>>> 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'
फिर भी एक और दृष्टिकोण। इसे प्राप्त करने के लिए आपको कोई प्रारूप तैयार नहीं करना पड़ेगा।
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)
यह भी ध्यान दिया जाना चाहिए कि एमडी 5 एक बहुत कमजोर हैश फ़ंक्शन है, यह भी टकराव पाया गया है (एक ही हैश में दो अलग-अलग प्लेनटेक्स्ट वैल्यू परिणाम) बस के लिए एक यादृच्छिक मूल्य का उपयोग करें plaintext
।