গৃহীত উত্তরের পাশাপাশি, একটি তৃতীয় বিকল্প রয়েছে যা কিছু ক্ষেত্রে কার্যকর হতে পারে:
এলোমেলো ম্যাকের সাথে ভি 1 ("ভি 1 এমসি")
আপনি ইচ্ছাকৃতভাবে একটি এলোমেলো সম্প্রচার ম্যাক ঠিকানা দিয়ে ভি 1 ইউআইডি উত্পন্ন করে ভি 1 এবং ভি 4 এর মধ্যে একটি হাইব্রিড তৈরি করতে পারেন (এটি ভি 1 স্পেক দ্বারা অনুমোদিত)। ফলস্বরূপ ভি 1 ইউআইডি সময় নির্ভর (নিয়মিত ভি 1 এর মতো), তবে হোস্ট-নির্দিষ্ট সমস্ত তথ্যের অভাব রয়েছে (ভি 4 এর মতো)। এটি এর সংঘর্ষ-প্রতিরোধের মধ্যে v4 এরও অনেক কাছাকাছি: v1mc = 60 বিট সময় + 61 এলোমেলো বিট = 121 অনন্য বিট; v4 = 122 এলোমেলো বিট।
আমি প্রথম যে স্থানটির মুখোমুখি হয়েছিলাম তা হ'ল পোস্টগ্রিসের uuid_generate_v1mc () ফাংশন। আমি তখন থেকে নিম্নলিখিত অজগর সমতুল্য ব্যবহার করেছি:
from os import urandom
from uuid import uuid1
_int_from_bytes = int.from_bytes # py3 only
def uuid1mc():
# NOTE: The constant here is required by the UUIDv1 spec...
return uuid1(_int_from_bytes(urandom(6), "big") | 0x010000000000)
(দ্রষ্টব্য: আমি একটি দীর্ঘ + দ্রুত সংস্করণ পেয়েছি যা সরাসরি ইউইউডি অবজেক্ট তৈরি করে; কেউ চাইলে পোস্ট করতে পারে)
কল / সেকেন্ডের বড় আকারের ক্ষেত্রে, এটি সিস্টেমের এলোমেলোভাবে ছাড়ার সম্ভাবনা রাখে। আপনি পরিবর্তে stdlib মডিউলটি ব্যবহার করতে পারেন random
(এটি সম্ভবত আরও দ্রুত হবে)। তবে সতর্ক থাকুন: আক্রমণকারী আরএনজি রাজ্যটি নির্ধারণ করতে পারে এবং এইভাবে ভবিষ্যতের ইউআইডিগুলিকে আংশিকভাবে পূর্বাভাস দেয় it
import random
from uuid import uuid1
def uuid1mc_insecure():
return uuid1(random.getrandbits(48) | 0x010000000000)