इस प्रश्न के बहुत सारे उत्तर हैं, लेकिन उनमें से कोई भी क्रिप्टोग्राफिक रूप से सुरक्षित छद्म-यादृच्छिक संख्या जनरेटर (CSPRNG) का लाभ नहीं उठाता है ।
सरल, सुरक्षित और सही उत्तर रैंडम लाईब का उपयोग करना है और पहिए को फिर से नहीं लगाना है ।
आप में से जो अपने स्वयं के समाधान का आविष्कार करने पर जोर देते हैं, उनके लिए PHP 7.0.0 random_int()
इस उद्देश्य के लिए प्रदान करेगा ; यदि आप अभी भी PHP 5.x पर हैं, तो हमने PHP 5 पॉलीफ़िल मेंrandom_int()
लिखा है ताकि आप PHP 7 में अपग्रेड करने से पहले भी नए API का उपयोग कर सकें।
PHP में सुरक्षित रूप से यादृच्छिक पूर्णांक बनाना कोई तुच्छ कार्य नहीं है। उत्पादन में घर-निर्मित एल्गोरिदम को तैनात करने से पहले आपको हमेशा अपने निवासी StackExchange क्रिप्टोग्राफी विशेषज्ञों के साथ जांच करनी चाहिए ।
जगह में एक पूर्णांक जनरेटर के साथ, CSPRNG के साथ एक यादृच्छिक स्ट्रिंग उत्पन्न करना पार्क में टहलना है।
एक सुरक्षित, रैंडम स्ट्रिंग बनाना
/**
* 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 (PHP 5 विफलताओं पर ध्यान न दें; इसे random_compat की आवश्यकता है)