ToolDeck

UUID v3 Generator

Generate deterministic name-based UUID v3 using MD5

Namespace

6ba7b810-9dad-11d1-80b4-00c04fd430c8

Name

Generated UUID v3

Enter a name and click Generate
Same namespace + name always produces the same UUID
Note:UUID v3 একটি লেগ্যাসি ফরম্যাট যা MD5 হ্যাশিং ব্যবহার করে। নির্ধারিত UUID প্রয়োজন এমন নতুন ডেভেলপমেন্টে UUID v5 (SHA-1) ব্যবহার করুন। সাধারণ উদ্দেশ্যে অনন্য ID-এর জন্য UUID v4 ব্যবহার করুন।

UUID v3 কী?

UUID v3 হলো একটি নাম-ভিত্তিক UUID সংস্করণ যা RFC 4122-এ সংজ্ঞায়িত। র‍্যান্ডম ডেটা বা টাইমস্ট্যাম্পের পরিবর্তে, এটি দুটি ইনপুট থেকে নির্ধারিতভাবে UUID তৈরি করে: একটি নেমস্পেস UUID এবং একটি নাম স্ট্রিং। নেমস্পেস + নাম জোড়াটি MD5 দিয়ে হ্যাশ করা হয় এবং ফলাফলের হ্যাশটি UUID হিসেবে ফরম্যাট করা হয়।

UUID v3-এর মূল বৈশিষ্ট্য হলো নির্ধারণযোগ্যতা: একই নেমস্পেস ও নাম যেকোনো মেশিনে, যেকোনো সময়ে সবসময় অভিন্ন UUID তৈরি করে। এটি কন্টেন্ট-অ্যাড্রেসিংয়ের জন্য উপযুক্ত — অর্থবহ নামে চিহ্নিত রিসোর্সগুলোর জন্য স্থিতিশীল শনাক্তকারী তৈরিতে।

UUID v3 তার হ্যাশ ফাংশন হিসেবে MD5 ব্যবহার করে। নিরাপত্তার উদ্দেশ্যে MD5 ক্রিপ্টোগ্রাফিক্যালি ভাঙা হিসেবে বিবেচিত, তাই নতুন ডেভেলপমেন্টে সাধারণত UUID v5 (SHA-1 ব্যবহার করে) পছন্দ করা হয়। v3 বা v5 কোনোটিই কোনো র‍্যান্ডমনেস প্রদান করে না — এগুলো সম্পূর্ণ নির্ধারিত।

স্ট্যান্ডার্ড নেমস্পেস

RFC 4122 চারটি পূর্ব-নির্ধারিত নেমস্পেস UUID সংজ্ঞায়িত করে। স্ট্যান্ডার্ড নেমস্পেস ব্যবহার করলে ইন্টারঅপারেবিলিটি নিশ্চিত হয় — দুটি স্বাধীন বাস্তবায়ন একই নেমস্পেসে একই নামের জন্য একই UUID v3 তৈরি করবে:

নেমস্পেসUUIDব্যবহার
DNS6ba7b810-9dad-11d1-80b4-00c04fd430c8সম্পূর্ণ যোগ্য ডোমেইন নাম (যেমন 'example.com')
URL6ba7b811-9dad-11d1-80b4-00c04fd430c8URL ও URI (যেমন 'https://example.com/resource')
OID6ba7b812-9dad-11d1-80b4-00c04fd430c8ISO অবজেক্ট আইডেন্টিফায়ার (যেমন '1.2.840.113556')
X.5006ba7b814-9dad-11d1-80b4-00c04fd430c8X.500 ডিস্টিংগুইশড নেম (যেমন 'cn=John,dc=example,dc=com')

আপনি যেকোনো UUID কাস্টম নেমস্পেস হিসেবেও ব্যবহার করতে পারেন — যেমন একটি UUID v4 যা একবার তৈরি করে আপনার অ্যাপ্লিকেশনে ধ্রুবক হিসেবে এমবেড করুন। এটি আপনার নিজের নাম-থেকে-UUID ম্যাপিংয়ের জন্য একটি প্রাইভেট নেমস্পেস তৈরি করতে দেয়।

UUID v3 বনাম UUID v5

UUID v3 ও UUID v5 কাঠামোগতভাবে অভিন্ন — উভয়ই নির্ধারিত, নাম-ভিত্তিক UUID। পার্থক্য কেবল হ্যাশ ফাংশনে:

UUID v3
  • MD5 হ্যাশিং ব্যবহার করে
  • 128-বিট আউটপুট (UUID আকারের)
  • RFC 4122-এ সংজ্ঞায়িত
  • MD5 ক্রিপ্টোগ্রাফিক্যালি ভাঙা
  • সব UUID লাইব্রেরিতে সমর্থিত
UUID v5
  • SHA-1 হ্যাশিং ব্যবহার করে
  • 160-বিট হ্যাশ 128 বিটে সংক্ষিপ্ত
  • RFC 4122-এ সংজ্ঞায়িত
  • SHA-1 নিরাপত্তায় অবচিত কিন্তু MD5 থেকে শক্তিশালী
  • সব UUID লাইব্রেরিতে সমর্থিত

সব নতুন ডেভেলপমেন্টে UUID v3-এর চেয়ে UUID v5 পছন্দ করুন। SHA-1 হ্যাশ MD5 থেকে শক্তিশালী এবং পারফরম্যান্সের পার্থক্য নগণ্য। UUID v3 কেবল তখনই ব্যবহার করুন যখন ইতিমধ্যে এটি ব্যবহার করা কোনো সিস্টেম থেকে UUID পুনরুৎপাদন করা প্রয়োজন।

UUID v3 কখন ব্যবহার করবেন

UUID v3 (এবং v5) উপযুক্ত যখন আপনার একটি অর্থবহ নাম থেকে প্রাপ্ত স্থিতিশীল, পুনরুৎপাদনযোগ্য শনাক্তকারী প্রয়োজন — সংরক্ষণ ও খোঁজ করতে হয় এমন র‍্যান্ডম ID-এর পরিবর্তে:

URL ক্যানোনিক্যালাইজেশন
যেকোনো URL-এর জন্য একটি নির্ধারিত UUID তৈরি করুন যা একটি ডেটাবেস বা ক্যাশে কম্প্যাক্ট, নির্দিষ্ট-দৈর্ঘ্যের কী হিসেবে ব্যবহার করা যায় — ম্যাপিং টেবিল সংরক্ষণ ছাড়াই।
DNS-ভিত্তিক শনাক্তকারী
হোস্টনেম বা ডোমেইন নামগুলোতে স্থিতিশীল UUID নির্ধারণ করুন যা বিভিন্ন ডিপ্লয়মেন্ট ও ডেটাবেসে সামঞ্জস্যপূর্ণ থাকে।
কন্টেন্ট অ্যাড্রেসিং
তাদের ক্যানোনিক্যাল নামে চিহ্নিত কন্টেন্ট আইটেমগুলোর জন্য পুনরুৎপাদনযোগ্য ID তৈরি করুন — নিবন্ধ, পণ্য বা কনফিগারেশন কী।
আইডেম্পোটেন্ট রিসোর্স তৈরি
একই রিসোর্স নামের জন্য একই UUID তৈরি করুন, যাতে বারবার তৈরির প্রচেষ্টা কোনো লুকআপ ছাড়াই স্বাভাবিকভাবে আইডেম্পোটেন্ট হয়।
টেস্ট ফিক্সচার
টেস্ট ডেটায় স্থিতিশীল, পূর্বানুমানযোগ্য UUID তৈরি করুন যাতে টেস্ট পুনরায় চালানোর সময় টেস্ট অ্যাসার্শন আপডেট করতে না হয়।
ক্রস-সিস্টেম ডিডুপ্লিকেশন
দুটি স্বাধীন সিস্টেম কোনো যোগাযোগ ছাড়াই একই নামের জন্য একই UUID তৈরি করতে পারে, শেয়ার্ড ID রেজিস্ট্রি ছাড়াই ডিডুপ্লিকেশন সক্ষম করে।

নির্ধারণযোগ্যতা বোঝা

UUID v3-এর নির্ধারণযোগ্যতা মানে একটি নির্দিষ্ট আউটপুট: যেকোনো নেমস্পেস UUID এবং যেকোনো নাম স্ট্রিং দিলে UUID সবসময় একই হয় — কোনো র‍্যান্ডমনেস নেই। এর মানে:

উদাহরণ (DNS নেমস্পেস, নাম = 'example.com'):9073926b-929f-31c2-abc9-fad77ae3e8eb

সবসময় তৈরি হয়: 9073926b-929f-31c2-abc9-fad77ae3e8eb

কোনো আক্রমণকারী নেমস্পেস জানলে এবং নাম অনুমান করতে পারলে, সে আগে থেকেই UUID গণনা করতে পারে। UUID v3 মানগুলো কখনো অপ্রত্যাশিত টোকেন, সেশন ID বা সিক্রেট হিসেবে ব্যবহার করা উচিত নয়। নিরাপত্তা-সংবেদনশীল যেকোনো শনাক্তকারীর জন্য UUID v4 ব্যবহার করুন।

কোড উদাহরণ

UUID v3 তৈরিতে একটি নেমস্পেস UUID এবং একটি নাম স্ট্রিং প্রয়োজন। প্রমাণিত uuid প্যাকেজ ব্যবহার করুন:

JavaScript / Node.js
// Browser / Node.js — UUID v3 without dependencies
function uuidV3(namespace, name) {
  // namespace must be a UUID string like '6ba7b810-9dad-11d1-80b4-00c04fd430c8'
  const nsBytes = namespace.replace(/-/g, '').match(/../g).map(h => parseInt(h, 16))
  const nameBytes = [...new TextEncoder().encode(name)]
  const combined = new Uint8Array([...nsBytes, ...nameBytes])

  // md5(combined) — use your preferred MD5 library or the inline implementation
  const hash = md5(combined) // returns Uint8Array(16)
  hash[6] = (hash[6] & 0x0f) | 0x30 // version 3
  hash[8] = (hash[8] & 0x3f) | 0x80 // variant

  const h = [...hash].map(b => b.toString(16).padStart(2, '0')).join('')
  return `${h.slice(0,8)}-${h.slice(8,12)}-${h.slice(12,16)}-${h.slice(16,20)}-${h.slice(20)}`
}

// Using the 'uuid' npm package
import { v3 as uuidv3 } from 'uuid'
const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'
console.log(uuidv3('example.com', uuidv3.DNS))
// → '9073926b-929f-31c2-abc9-fad77ae3e8eb' (always the same)
Python
import uuid

# Using the standard library
dns_uuid = uuid.uuid3(uuid.NAMESPACE_DNS, 'example.com')
print(dns_uuid)
# → 9073926b-929f-31c2-abc9-fad77ae3e8eb

url_uuid = uuid.uuid3(uuid.NAMESPACE_URL, 'https://example.com/page')
print(url_uuid)

# Custom namespace
MY_NS = uuid.UUID('a1b2c3d4-e5f6-7890-abcd-ef1234567890')
custom = uuid.uuid3(MY_NS, 'my-entity-name')
print(custom)
Go
package main

import (
    "fmt"
    "github.com/google/uuid"
)

func main() {
    // Standard DNS namespace
    ns := uuid.MustParse("6ba7b810-9dad-11d1-80b4-00c04fd430c8")
    id := uuid.NewMD5(ns, []byte("example.com"))
    fmt.Println(id)
    // → 9073926b-929f-31c2-abc9-fad77ae3e8eb

    // URL namespace
    urlNS := uuid.MustParse("6ba7b811-9dad-11d1-80b4-00c04fd430c8")
    idURL := uuid.NewMD5(urlNS, []byte("https://example.com/page"))
    fmt.Println(idURL)
}

সাধারণ জিজ্ঞাসা

UUID v3 এবং UUID v5 কি পরস্পর পরিবর্তনযোগ্য?
না — তারা একই ইনপুটের জন্য ভিন্ন আউটপুট তৈরি করে কারণ তারা ভিন্ন হ্যাশ ফাংশন (MD5 বনাম SHA-1) ব্যবহার করে। একই নেমস্পেস + নাম থেকে তৈরি একটি UUID v3 এবং একটি UUID v5 আলাদা UUID হবে। এগুলো পরস্পর পরিবর্তনযোগ্য নয়, তবে কাঠামো ও ব্যবহারের ক্ষেত্রে কার্যত সমতুল্য।
UUID v3 কি কোলিশন-প্রতিরোধী?
একটি নির্দিষ্ট নেমস্পেসের মধ্যে, দুটি ভিন্ন নাম ভিন্ন UUID v3 মান তৈরি করবে যতক্ষণ MD5 সেই নির্দিষ্ট ইনপুটগুলোর জন্য কোলিশন না করে। MD5 কোলিশন অ্যাটাক বিদ্যমান, কিন্তু এগুলোর জন্য সতর্কভাবে তৈরি ইনপুট প্রয়োজন — বাস্তবে স্বাভাবিকভাবে ঘটা নামগুলো (URL, ডোমেইন নাম, পণ্য ID) কোলিশন করবে না। আরও নিশ্চিততার জন্য UUID v5 ব্যবহার করুন।
আমি কি UUID v3 ডেটাবেসে প্রাথমিক কী হিসেবে ব্যবহার করতে পারি?
হ্যাঁ, যদি আপনি ট্রেড-অফগুলো বোঝেন। UUID v3 নির্ধারিত, তাই একই নামের জন্য একই কী তৈরি হবে — এটি স্বাভাবিক আইডেম্পোটেন্সি প্রদান করে। তবে UUID v3 তৈরির ক্রম অনুযায়ী সাজানো যায় না এবং UUID v4-এর মতোই ইন্ডেক্স ফ্র্যাগমেন্টেশন প্রযোজ্য। সময়-ক্রমানুসারী, সাজানোযোগ্য প্রাথমিক কীর জন্য UUID v7 ব্যবহার করুন।
নাম ইনপুটের জন্য কোন এনকোডিং ব্যবহার করা উচিত?
RFC 4122 নির্দিষ্ট করে যে নামটি নেমস্পেসের ক্যানোনিক্যাল ফর্ম ব্যবহার করে বাইটে রূপান্তর করতে হবে। DNS নেমস্পেসের জন্য, শেষে ডট ছাড়া UTF-8 স্ট্রিং হিসেবে ডোমেইন নাম ব্যবহার করুন। URL নেমস্পেসের জন্য, UTF-8 স্ট্রিং হিসেবে পূর্ণ URL ব্যবহার করুন। সবসময় একই এনকোডিং সামঞ্জস্যপূর্ণভাবে ব্যবহার করুন — একই লজিক্যাল নামের বিভিন্ন এনকোডিং ভিন্ন UUID তৈরি করবে।
UUID v3 কি মূল নামটি লুকিয়ে রাখে?
MD5 একটি একমুখী ফাংশন — আপনি মূল নামটি পুনরুদ্ধার করতে UUID v3 বিপরীত করতে পারবেন না। তবে কোনো আক্রমণকারী নেমস্পেস জানলে এবং সম্ভাব্য নামের একটি ছোট সেট সন্দেহ করলে, সে প্রতিটি প্রার্থীর জন্য UUID v3 মান আগে থেকে গণনা করে তুলনা করতে পারে। সীমিত বা পূর্বানুমানযোগ্য ইনপুটের ক্ষেত্রে UUID v3 কোনো গোপনীয়তা প্রদান করে না। অস্বচ্ছ, অনুমান-অযোগ্য শনাক্তকারী প্রয়োজন হলে UUID v4 ব্যবহার করুন।