3 টাইপ করুন এবং টাইপ করুন 5 UUID জানা মাত্র একটি ঠাসাঠাসি একটি কৌশল হয় হ্যাশ একটি UUID মধ্যে।
- টাইপ 1: স্ট্যাকস ম্যাক ঠিকানা + ডেটটাইম 128 বিট মধ্যে
- টাইপ 3 : একটি এমডি 5 হ্যাশ 128 বিটের মধ্যে স্টাফ করে
- প্রকার 4: এলোমেলো তথ্য স্টাফ 128 বিট মধ্যে
- 5 টাইপ করুন : একটি SHA1 হ্যাশ 128 বিটের মধ্যে স্টফ করে
- প্রকার 6: অনুক্রমিক ইউআইডিগুলির জন্য আনুষ্ঠানিক ধারণা
একটি SHA1 হ্যাশ 160 বিট (20 বাইট) আউটপুট করে; হ্যাশের ফলাফলটি একটি ইউইউডিতে রূপান্তরিত হয়।
SHA1 থেকে 20-বাইট হ্যাশ সহ:
SHA1 Digest: 74738ff5 5367 e958 9aee 98fffdcd1876 94028007
UUID (v5): 74738ff5-5367-5958-9aee-98fffdcd1876
^_low nibble is set to 5, to indicate type 5
^_first two bits set to 1 and 0, respectively
(দ্রষ্টব্য যে '9' এর প্রথম দুটি বিট ইতিমধ্যে যথাক্রমে 1 এবং 0, সুতরাং এর কোনও প্রভাব নেই)।
আমি কি হ্যাশ করব?
আপনি সম্ভবত ভাবছেন যে এটি হ্যাশ করার কথা। মূলত আপনি হ্যাশ এর সংক্ষিপ্তকরণ:
sha1([NamespaceUUID]+[AnyString]);
নামের বিরোধগুলি রোধ করতে আপনি আপনার স্ট্রিংটিকে তথাকথিত নেমস্পেস দিয়ে উপসর্গ করেন ।
UUID জন্য RFC তোমার জন্য চার নামব্যবধান প্রাক সংজ্ঞায়িত করে:
NameSpace_DNS
: {6ba7b810-9 داد-11d1-80b4-00c04fd430c8}
NameSpace_URL
: {6ba7b811-9 داد-11d1-80b4-00c04fd430c8}
NameSpace_OID
: {6ba7b812-9 داد-11d1-80b4-00c04fd430c8}
NameSpace_X500
: {6ba7b814-9dad-11d1-80b4-00c04fd430c8}
সুতরাং, আপনি একসাথে হ্যাশ করতে পারে:
StackOverflowDnsUUID = sha1(Namespace_DNS + "stackoverflow.com");
StackOverflowUrlUUID = sha1(Namespace_URL + "stackoverflow.com");
আরএফসি তারপরে সংজ্ঞা দেয়:
- SHA1 থেকে 160 বিট নিন
- এবং এটিকে একটি ইউইউডি এর 128 বিটে রূপান্তর করুন
মৌলিক সারকথা শুধুমাত্র প্রথম 128 বিট, কাপড় একটি নিতে হয় 5
এ ধরনের রেকর্ড, এবং তারপর প্রথম দুই বিট সেট clock_seq_hi_and_reserved
1 ও 0, যথাক্রমে অধ্যায়।
আরও উদাহরণ
এখন আপনার একটি ফাংশন রয়েছে যা একটি তথাকথিত নাম উত্পন্ন করে , আপনি ফাংশনটি রাখতে পারেন (সিউডো কোডে):
UUID NameToUUID(UUID NamespaceUUID, String Name)
{
byte[] hash = sha1(NamespaceUUID.ToBytes() + Name.ToBytes());
UUID result;
Copy(hash, result, 16);
result[6] &= 0x0F;
result[6] |= 0x50;
result[8] &= 0x3F;
result[8] |= 0x80;
return result;
}
(মনে রাখবেন যে আপনার সিস্টেমের এন্ডিয়ান-নেস উপরের বাইটগুলির সূচকগুলিকে প্রভাবিত করতে পারে)
আপনার কল থাকতে পারে:
uuid = NameToUUID(Namespace_DNS, 'www.stackoverflow.com');
uuid = NameToUUID(Namespace_DNS, 'www.google.com');
uuid = NameToUUID(Namespace_URL, 'http://www.stackoverflow.com');
uuid = NameToUUID(Namespace_URL, 'http://www.google.com/search&q=rfc+4112');
uuid = NameToUUID(Namespace_URL, 'http://stackoverflow.com/questions/5515880/test-vectors-for-uuid-version-5-converting-hash-into-guid-algorithm');
এখন আপনার প্রশ্ন ফিরে
সংস্করণ 3 এবং সংস্করণ 5 ইউআইইউডের জন্য অতিরিক্ত কমান্ড লাইনের আর্গুমেন্টের নামস্থান এবং নাম দিতে হবে। নেমস্পেসটি হয় স্ট্রিং প্রতিনিধিত্বের একটি ইউইউডি বা অভ্যন্তরীণ প্রাক-সংজ্ঞায়িত নেমস্পেস ইউআইডিগুলির জন্য সনাক্তকারী (বর্তমানে পরিচিত "এনএস: ডিএনএস", "এনএস: ইউআরএল", "এনএস: ওআইডি", এবং "এনএস: এক্স 500")। নামটি নির্বিচারে দৈর্ঘ্যের একটি স্ট্রিং।
নামস্থান যাই হোক না কেন আপনার মত UUID হয়। এটি পূর্বনির্ধারিতগুলির মধ্যে একটি হতে পারে, বা আপনি নিজের তৈরি করতে পারেন, যেমন:
UUID Namespace_RectalForeignExtractedObject = '8e884ace-bee4-11e4-8dfc-aa07a5b093db'
নামটি নির্বিচারে দৈর্ঘ্যের একটি স্ট্রিং।
নামটি কেবলমাত্র পাঠ্য যা আপনি নেমস্পেসে যুক্ত করতে চান, তারপরে হ্যাশ করে একটি ইউইউডিতে স্টাফ করতে চান:
uuid = NameToUUID('8e884ace-bee4-11e4-8dfc-aa07a5b093db', 'screwdriver');
uuid = NameToUUID('8e884ace-bee4-11e4-8dfc-aa07a5b093db', 'toothbrush');
uuid = NameToUUID('8e884ace-bee4-11e4-8dfc-aa07a5b093db', 'broomstick');
uuid = NameToUUID('8e884ace-bee4-11e4-8dfc-aa07a5b093db', 'orange');
uuid = NameToUUID('8e884ace-bee4-11e4-8dfc-aa07a5b093db', 'axe handle');
uuid = NameToUUID('8e884ace-bee4-11e4-8dfc-aa07a5b093db', 'impulse body spray');
uuid = NameToUUID('8e884ace-bee4-11e4-8dfc-aa07a5b093db', 'iPod Touch');
দ্রষ্টব্য : সর্বজনীন ডোমেনে প্রকাশিত কোনও কোড। কোনও অ্যাট্রিবিউশনের প্রয়োজন নেই।