ඇල්ගොරිතම
සසම්භාවී නූලක් ජනනය කිරීම සඳහා, පිළිගත හැකි සංකේත සමූහයේ සිට අහඹු ලෙස අඳින ලද අක්ෂර වින්යාසය අපේක්ෂිත දිගට ළඟා වන තුරු.
ක්රියාත්මක කිරීම
අහඹු හඳුනාගැනීම් ජනනය කිරීම සඳහා තරමක් සරල හා ඉතා නම්යශීලී කේතයක් මෙන්න. වැදගත් යෙදුම් සටහන් සඳහා පහත තොරතුරු කියවන්න .
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);
සැසි හඳුනාගැනීම් ලෙස භාවිතා කරන්න
අද්විතීය විය හැකි සැසි හඳුනාගැනීම් උත්පාදනය කිරීම ප්රමාණවත් නොවේ, නැතහොත් ඔබට සරල කවුන්ටරයක් භාවිතා කළ හැකිය. පුරෝකථනය කළ හැකි හඳුනාගැනීම් භාවිතා කරන විට ප්රහාරකයින් සැසි පැහැර ගනී.
දිග සහ ආරක්ෂාව අතර ආතතියක් පවතී. කෙටි හඳුනාගැනීම් අනුමාන කිරීම පහසුය, මන්ද අඩු හැකියාවන් ඇත. නමුත් දිගු හඳුනාගැනීම් මඟින් වැඩි ගබඩා සහ කලාප පළලක් පරිභෝජනය කරයි. විශාල සංකේත සමූහයක් උපකාරී වේ, නමුත් හඳුනාගැනීම් URL වල ඇතුළත් කර ඇත්නම් හෝ අතින් නැවත ඇතුළත් කළහොත් කේතීකරණ ගැටළු ඇති විය හැක.
සැසි හඳුනාගැනීම් සඳහා අහඹු හෝ එන්ට්රොපියෙහි මූලික ප්රභවය විය යුත්තේ ගුප්ත විද්යාව සඳහා නිර්මාණය කර ඇති අහඹු සංඛ්යා උත්පාදක ය. කෙසේ වෙතත්, මෙම ජනක යන්ත්ර ආරම්භ කිරීම සමහර විට පරිගණකමය වශයෙන් මිල අධික හෝ මන්දගාමී විය හැකි බැවින් හැකි සෑම විටම ඒවා නැවත භාවිතා කිරීමට උත්සාහ කළ යුතුය.
වස්තු හඳුනාගැනීම් ලෙස භාවිතා කරන්න
සෑම යෙදුමකටම ආරක්ෂාව අවශ්ය නොවේ. අහඹු පැවරුම කිසිදු සම්බන්ධීකරණයක් හෝ කොටස් කිරීමකින් තොරව හවුල් අවකාශයක හඳුනාගැනීම් උත්පාදනය කිරීම සඳහා බහු ආයතනවලට කාර්යක්ෂම ක්රමයක් විය හැකිය. සම්බන්ධීකරණය මන්දගාමී විය හැකිය, විශේෂයෙන් පොකුරු හෝ බෙදා හරින ලද පරිසරයක, සහ අවකාශය බෙදීම ගැටළු ඇති කරන්නේ ආයතන ඉතා කුඩා හෝ විශාල කොටස් සමඟ අවසන් වන විට ය.
බොහෝ වෙබ් යෙදුම්වල සිදු වන පරිදි, ප්රහාරකයාට ඒවා බැලීමට හා හැසිරවීමට හැකි නම්, ඒවා අනපේක්ෂිත කිරීමට පියවර නොගෙන ජනනය කරන හඳුනාගැනීම් වෙනත් ක්රමවලින් ආරක්ෂා කළ යුතුය. ප්රවේශ අවසරයකින් තොරව ප්රහාරකයාට අනන්යතාවය අනුමාන කළ හැකි වස්තූන් ආරක්ෂා කරන වෙනම බලය පැවරීමේ පද්ධතියක් තිබිය යුතුය.
අපේක්ෂිත මුළු හඳුනාගැනීම් සංඛ්යාව අනුව ගැටුම් ඇතිවීමට ඉඩක් නොමැති තරම් දිගු හඳුනාගැනීම් භාවිතා කිරීමට ද සැලකිලිමත් විය යුතුය. මෙය "උපන් දින විරුද්ධාභාසය" ලෙස හැඳින්වේ. ගැටීමෙන් සම්භාවිතාව, පි , ආසන්න වශයෙන් n යනු 2 / (2q x එහිදී), n ඇත්තටම ජනනය හඳුනා සංඛ්යාව වන අතර, q හෝඩියේ දී පැහැදිලි සංකේත සංඛ්යාව වන අතර, x යන හඳුනා දිග වේ. මෙය 2 ‑50 හෝ ඊට අඩු ඉතා කුඩා සංඛ්යාවක් විය යුතුය .
මෙය ක්රියාත්මක කිරීමෙන් පෙනී යන්නේ 500k 15 අක්ෂර හඳුනාගැනීම් අතර ision ට්ටනය වීමේ අවස්ථාව 2 ‑52 ක් පමණ වන අතර එය කොස්මික් කිරණ ආදියෙන් හඳුනා නොගත් දෝෂ වලට වඩා අඩු විය හැකි බවයි.
UUIDs සමඟ සංසන්දනය කිරීම
ඔවුන්ගේ පිරිවිතරයන්ට අනුව, UUIDs අනපේක්ෂිත ලෙස නිර්මාණය කර නොමැති අතර සැසි හඳුනාගැනීම් ලෙස භාවිතා නොකළ යුතුය.
UUIDs ඒවායේ සම්මත ආකෘතියෙන් විශාල ඉඩ ප්රමාණයක් ගනී: එන්ට්රොපි බිටු 122 ක් සඳහා අක්ෂර 36 ක්. ("අහඹු" UUID හි සියලුම බිටු අහඹු ලෙස තෝරා නොගනී.) අහඹු ලෙස තෝරාගත් අක්ෂරාංක නූලක් අක්ෂර 21 කින් වැඩි එන්ට්රොපිය ඇසුරුම් කරයි.
UUIDs නම්යශීලී නොවේ; ඒවාට ප්රමිතිගත ව්යුහයක් සහ පිරිසැලසුමක් ඇත. මෙය ඔවුන්ගේ ප්රධාන ගුණාංගය මෙන්ම ඔවුන්ගේ ප්රධාන දුර්වලතාවයයි. බාහිර පාර්ශවයක් සමඟ සහයෝගයෙන් කටයුතු කරන විට, UUIDs ඉදිරිපත් කරන ප්රමිතිකරණය ප්රයෝජනවත් විය හැකිය. තනිකරම අභ්යන්තර භාවිතය සඳහා ඒවා අකාර්යක්ෂම විය හැකිය.