পাইথনে র্যান্ডম হ্যাশ


104

কি সবচেয়ে সহজ পদ্ধিতি হল উপায় একটি র্যান্ডম হ্যাশ পাইথন মধ্যে (MD5) জেনারেট করতে?


4
এলোমেলো কিছু হিসাবে? নাকি কোনও বস্তুর জন্য? আপনি যদি কেবল একটি এলোমেলো এমডি 5 চান তবে কিছু নম্বর চয়ন করুন।
সমোজ

আমি আপলোড করার আগে ফাইলগুলির নাম পরিবর্তন করছি এবং এইরকম একটি ফাইলের নাম চাই: টাইমস্ট্যাম্প_রাডমমডি 5 ex এক্সটেনশন চিয়ার্স!
মিস্তরো

4
আপনি কেবল তাদের নাম পরিবর্তন করতে পারেন টাইমস্ট্যাম্প_রাডমমনিবার.সেক্সটে। এমডি 5 (এলোমেলো সংখ্যা) এলোমেলোভাবে নিজে থেকে আর ভাল হওয়ার কোনও কারণ নেই।
sth

পাইথন 3 জন্য শ্রেষ্ঠ উত্তর শেষ এক import uuid; uuid.uuid().hex stackoverflow.com/a/20060712/3218806
maxbellec

উত্তর:


135

একটি এমডি 5-হ্যাশ কেবল একটি 128-বিট মান, তাই আপনি যদি এলোমেলো একটি চান:

import random

hash = random.getrandbits(128)

print("hash value: %032x" % hash)

যদিও আমি সত্যিই বিষয়টি দেখতে পাচ্ছি না। আপনার কেন এটি প্রয়োজন তা বিশদভাবে জানা উচিত ...


এলোমেলো সংখ্যা থেকে তুলনামূলকভাবে ব্যয়বহুল হ্যাশ গণনা না করার জন্য +1: এই পদ্ধতিটি 5x দ্রুত।
নিকোলাস ডুমাজেট

11
+1 - অবশ্যই এটি আমার উত্তরের চেয়ে ভাল, এটিও এর মতো ব্যবহার করা যেতে পারে: হেক্স (এলোমেলো.রেগেন্ডবিটস (128)) [2: -1] এটি আপনাকে এমডি 5 হেক্সডিজাস্ট পদ্ধতি হিসাবে একই আউটপুট দেয়।
জিরি

4
এলোমেলো.সীড () কলটি অকেজো, কমবেশি।
tzot

4
আমি os.urandom ব্যবহার করতাম কারণ MD5 হ্যাশ চাওয়ার অর্থ নিরাপদ থাকা চাই want
অজানা

9
এটি দিয়ে কীভাবে করা যায় তা এখানে os.urandom:''.join('%02x' % ord(x) for x in os.urandom(16))
ফোগলবার্ড

105

আমি মনে করি আপনি যা সন্ধান করছেন এটি সর্বজনীন অনন্য শনাক্তকারী T

import uuid
uuid.uuid4().hex

ইউআইইডি 4 আপনাকে একটি এলোমেলো অনন্য শনাক্তকারী দেয় যা এমডি 5 যোগফলের সমান দৈর্ঘ্য। হেক্স একটি ইউউইড অবজেক্ট ফিরিয়ে দেওয়ার পরিবর্তে হেক্স স্ট্রিং হিসাবে উপস্থাপন করবে।

http://docs.python.org/2/library/uuid.html


48

দ্য secretsমডিউল পাইথন 3.6+ মধ্যে যোগ করা হয়েছিল। এটি একক কল সহ ক্রিপ্টোগ্রাফিক সুরক্ষিত এলোমেলো মান সরবরাহ করে। ফাংশনগুলি একটি alচ্ছিক nbytesআর্গুমেন্ট গ্রহণ করে, ডিফল্ট হয় 32 (বাইটস * 8 বিট = 256-বিট টোকেন)। MD5 এর 128-বিট হ্যাশ রয়েছে, সুতরাং "MD5- জাতীয়" টোকেনের জন্য 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'

45

এটি অজগর 2.x এবং 3.x উভয়ের জন্য কাজ করে

import os
import binascii
print(binascii.hexlify(os.urandom(16)))
'4a4d443679ed46f7514ad6dbe3733c3d'

4
হেক্সাডেসিমাল এনকোডিংয়ের এই উপায়টি পাইথন 3 তে আর কাজ করে না।
Cramdir

4
ধন্যবাদ এটি এলোমেলো হ্যাশ কী তৈরি করার সেরা উপায়।
জেক

7
2.x এবং 3.x এর জন্য কাজ করে: binascii.hexlify (os.urandom (16))
ক্লে

19

তবুও আরেকটি পন্থা। এটি পেতে আপনাকে কোনও বিন্যাস করতে হবে না।

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'

হেক্সাডেসিমাল অঙ্কগুলি প্রতিবিম্বিত করতে আমি সম্ভবত স্ট্রিং.লেটারগুলিকে 'abcdf' এ পরিবর্তন করব। তবে দুর্দান্ত সমাধান!
রানচাল্প

''.join(random.sample(string.ascii_letters + string.digits, 8))অজগর আরও?
404pio

6

এই নির্দিষ্ট প্রশ্নের আরেকটি পদ্ধতি:

import random, string

def random_md5like_hash():
    available_chars= string.hexdigits[:16]
    return ''.join(
        random.choice(available_chars)
        for dummy in xrange(32))

আমি বলছি না যে এটি অন্য কোনও উত্তরের চেয়ে দ্রুত বা ভাল; শুধু এটি অন্য পদ্ধতির :)




0
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


ব্যবহারকারীর ইনপুট প্রয়োজন মূল প্রশ্নের "সবচেয়ে সহজ" দিকটির সাথে সহায়তা করে না ...
এএস ম্যাকেয়ে

আপনি কি আপনার কোড পরীক্ষা করেছেন? এটি 3 লাইনে একটি
পেরেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.