অ্যালগরিদম
একটি এলোমেলো স্ট্রিং উত্পন্ন করতে, স্ট্রিংটি পছন্দসই দৈর্ঘ্যে না পৌঁছা পর্যন্ত গ্রহণযোগ্য চিহ্নগুলির সেট থেকে এলোমেলোভাবে আঁকানো অক্ষরগুলি।
বাস্তবায়ন
এলোমেলো শনাক্তকারী তৈরির জন্য এখানে বেশ কয়েকটি সহজ এবং খুব নমনীয় কোড। গুরুত্বপূর্ণ অ্যাপ্লিকেশন নোটগুলির জন্য নিম্নলিখিত তথ্যগুলি পড়ুন ।
public class RandomString {
/**
* Generate a random string.
*/
public String nextString() {
for (int idx = 0; idx < buf.length; ++idx)
buf[idx] = symbols[random.nextInt(symbols.length)];
return new String(buf);
}
public static final String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static final String lower = upper.toLowerCase(Locale.ROOT);
public static final String digits = "0123456789";
public static final String alphanum = upper + lower + digits;
private final Random random;
private final char[] symbols;
private final char[] buf;
public RandomString(int length, Random random, String symbols) {
if (length < 1) throw new IllegalArgumentException();
if (symbols.length() < 2) throw new IllegalArgumentException();
this.random = Objects.requireNonNull(random);
this.symbols = symbols.toCharArray();
this.buf = new char[length];
}
/**
* Create an alphanumeric string generator.
*/
public RandomString(int length, Random random) {
this(length, random, alphanum);
}
/**
* Create an alphanumeric strings from a secure generator.
*/
public RandomString(int length) {
this(length, new SecureRandom());
}
/**
* Create session identifiers.
*/
public RandomString() {
this(21);
}
}
ব্যবহারের উদাহরণ
8-অক্ষর সনাক্তকারীদের জন্য একটি সুরক্ষিত জেনারেটর তৈরি করুন:
RandomString gen = new RandomString(8, ThreadLocalRandom.current());
সেশন সনাক্তকারীদের জন্য একটি সুরক্ষিত জেনারেটর তৈরি করুন:
RandomString session = new RandomString();
মুদ্রণের জন্য সহজেই পঠনযোগ্য কোড সহ একটি জেনারেটর তৈরি করুন। কম চিহ্ন ব্যবহারের জন্য ক্ষতিপূরণ দেওয়ার জন্য স্ট্রিংগুলি পূর্ণ বর্ণমালার স্ট্রিংয়ের চেয়ে দীর্ঘ হয়:
String easy = RandomString.digits + "ACEFGHJKLMNPQRUVWXYabcdefhijkprstuvwx";
RandomString tickets = new RandomString(23, new SecureRandom(), easy);
সেশন সনাক্তকারী হিসাবে ব্যবহার করুন
সেশন শনাক্তকারীদের উত্পাদন করা যা সম্ভবত অনন্য বলে মনে হয় তা যথেষ্ট ভাল নয়, বা আপনি কেবল একটি সাধারণ কাউন্টার ব্যবহার করতে পারেন। যখন অনুমানযোগ্য সনাক্তকারী ব্যবহার করা হয় তখন আক্রমণকারীরা হাইজ্যাক সেশন করে।
দৈর্ঘ্য এবং সুরক্ষার মধ্যে টান রয়েছে। সংক্ষিপ্ত শনাক্তকারীদের অনুমান করা সহজ, কারণ সেখানে সম্ভাবনা কম। তবে আর শনাক্তকারীরা বেশি স্টোরেজ এবং ব্যান্ডউইথ ব্যবহার করেন। প্রতীকগুলির একটি বৃহত্তর সেট সাহায্য করে, তবে শনাক্তকারীদের ইউআরএল অন্তর্ভুক্ত করা থাকলে বা হাত দিয়ে পুনরায় প্রবেশ করা থাকলে এনকোডিংয়ের সমস্যা হতে পারে।
সেশন সনাক্তকারীদের জন্য এলোমেলোভাবে অন্তর্নিহিত উত্স, বা এনট্রপি, ক্রিপ্টোগ্রাফির জন্য ডিজাইন করা একটি এলোমেলো সংখ্যা জেনারেটর থেকে আসা উচিত। তবে, এই জেনারেটরগুলির সূচনাটি কখনও কখনও গণ্য ব্যয়বহুল বা ধীর হতে পারে, তাই যখন সম্ভব হয় তখন এগুলি পুনরায় ব্যবহার করার চেষ্টা করা উচিত।
অবজেক্ট আইডেন্টিফায়ার হিসাবে ব্যবহার করুন
প্রতিটি অ্যাপ্লিকেশন সুরক্ষার প্রয়োজন হয় না। এলোমেলোভাবে অ্যাসাইনমেন্ট একাধিক সত্তার পক্ষে কোনও সমন্বয় বা পার্টিশন ছাড়াই ভাগ করে নেওয়া জায়গায় সনাক্তকারী উত্পন্ন করার কার্যকর উপায় হতে পারে। সমন্বয় ধীর হতে পারে, বিশেষত একটি ক্লাস্টারযুক্ত বা বিতরণ পরিবেশে, এবং সত্ত্বাগুলি যখন খুব ছোট বা খুব বড় শেয়ারগুলি সমাপ্ত হয় তখন একটি স্থান বিভাজন সমস্যা তৈরি করে।
অপ্রত্যাশিত করার ব্যবস্থা না নিয়ে উত্পন্ন শনাক্তকারীগুলিকে অন্য উপায়ে সুরক্ষিত করা উচিত যদি কোনও আক্রমণকারী তাদের দেখার এবং পরিচালনা করতে সক্ষম হতে পারে, বেশিরভাগ ওয়েব অ্যাপ্লিকেশনগুলিতে ঘটে। একটি পৃথক অনুমোদনের সিস্টেম থাকা উচিত যা অ্যাক্সেস অনুমতি ছাড়াই আক্রমণকারী দ্বারা সনাক্তকারী অনুমান করা যায় এমন জিনিসগুলিকে সুরক্ষা দেয়।
প্রত্যাশিত মোট শনাক্তকারীদের সংখ্যার ভিত্তিতে সংঘর্ষগুলি তৈরি করতে যথেষ্ট দীর্ঘ এমন শনাক্তকারীদের ব্যবহার করার জন্যও যত্ন নেওয়া উচিত। এটি "জন্মদিনের প্যারাডক্স" হিসাবে উল্লেখ করা হয়। সংঘর্ষের সম্ভাবনা, পি , প্রায় আনুমানিক 2 2 / (2q x ), যেখানে n আসলে উত্পাদিত শনাক্তকারীর সংখ্যা, q বর্ণমালার পৃথক চিহ্নগুলির সংখ্যা এবং x শনাক্তকারীদের দৈর্ঘ্য। এটি খুব কম সংখ্যক হওয়া উচিত, যেমন 2 ‑50 বা তার চেয়ে কম।
এটি কাজ করে দেখায় যে 500 কে 15-চরিত্র শনাক্তকারীদের মধ্যে সংঘর্ষের সম্ভাবনা প্রায় 2 ‑52 , যা সম্ভবত মহাজাগতিক রশ্মি থেকে সনাক্ত করা ত্রুটিগুলির চেয়ে কম সম্ভাবনা রয়েছে etc.
ইউইউডিগুলির সাথে তুলনা
তাদের স্পেসিফিকেশন অনুসারে, ইউআইডিগুলি অনুমানযোগ্য হিসাবে নকশাকৃত নয় এবং সেশন শনাক্তকারী হিসাবে ব্যবহার করা উচিত নয় ।
তাদের মানক বিন্যাসে ইউআইডিগুলি প্রচুর স্থান নেয়: কেবলমাত্র ইন্ট্রপির 122 বিটের জন্য 36 টি অক্ষর। (একটি "এলোমেলো" ইউআইডি এর সমস্ত বিট এলোমেলোভাবে নির্বাচন করা হয় না)) একটি এলোমেলোভাবে বেছে নেওয়া আলফানিউমেরিক স্ট্রিং মাত্র 21 টি অক্ষরে আরও এনট্রপি প্যাক করে।
ইউআইডিগুলি নমনীয় নয়; তাদের একটি মানক কাঠামো এবং বিন্যাস রয়েছে। এটি তাদের প্রধান পুণ্যের পাশাপাশি তাদের প্রধান দুর্বলতা। বাইরের কোনও দলের সাথে সহযোগিতা করার সময়, ইউআইডি দ্বারা প্রদত্ত মানকটি সহায়ক হতে পারে। খাঁটি অভ্যন্তরীণ ব্যবহারের জন্য, তারা অদক্ষ হতে পারে।