এই প্রশ্নের উত্তর অনেক আছে, কিন্তু তাদের কেউই ক্রিপ্টোগ্রাফিকভাবে সিকিউর সিউডো-র্যান্ডম নম্বর জেনারেটর (সিএসপিআরএনজি) ব্যবহার করেন না।
সহজ, সুরক্ষিত এবং সঠিক উত্তরটি হ'ল র্যান্ডমলিব ব্যবহার করা এবং চাকাটি পুনরায় উদ্ভাবন করা নয়।
আপনারা যারা নিজের সমাধান আবিষ্কার করার জন্য জিদ করেন, পিএইচপি 7.0.0 random_int()
এই উদ্দেশ্যে সরবরাহ করবে; আপনি যদি এখনও পিএইচপি 5.x এ থাকেন তবে আমরা একটি পিএইচপি 5 পলিফিলrandom_int()
লিখেছিলাম যাতে আপনি পিএইচপি 7 তে আপগ্রেড করার আগেই নতুন এপিআই ব্যবহার করতে পারেন।
নিরাপদে পিএইচপিতে এলোমেলো পূর্ণসংখ্যা উত্পন্ন করা তুচ্ছ কাজ নয়। আপনি উত্পাদনে কোনও বাড়ির বর্ধিত অ্যালগরিদম স্থাপন করার আগে আপনার সর্বদা আপনার আবাসিক স্ট্যাকএক্সচেঞ্জ ক্রিপ্টোগ্রাফি বিশেষজ্ঞদের সাথে যোগাযোগ করা উচিত ।
নিরাপদে পূর্ণসংখ্যার জেনারেটর স্থানে থাকা, সিএসপিআরএনজি দিয়ে একটি এলোমেলো স্ট্রিং তৈরি করা পার্কে হাঁটা।
একটি সুরক্ষিত, এলোমেলো স্ট্রিং তৈরি করা হচ্ছে
/**
* Generate a random string, using a cryptographically secure
* pseudorandom number generator (random_int)
*
* This function uses type hints now (PHP 7+ only), but it was originally
* written for PHP 5 as well.
*
* For PHP 7, random_int is a PHP core function
* For PHP 5.x, depends on https://github.com/paragonie/random_compat
*
* @param int $length How many characters do we want?
* @param string $keyspace A string of all possible characters
* to select from
* @return string
*/
function random_str(
int $length = 64,
string $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
): string {
if ($length < 1) {
throw new \RangeException("Length must be a positive integer");
}
$pieces = [];
$max = mb_strlen($keyspace, '8bit') - 1;
for ($i = 0; $i < $length; ++$i) {
$pieces []= $keyspace[random_int(0, $max)];
}
return implode('', $pieces);
}
ব্যবহার :
$a = random_str(32);
$b = random_str(8, 'abcdefghijklmnopqrstuvwxyz');
$c = random_str();
ডেমো : https://3v4l.org/IMJGF (পিএইচপি 5 ব্যর্থতা উপেক্ষা করুন; এটি এলোমেলো_কম্প্যাট প্রয়োজন)