949
0
0
PHP random string generator function

PHP random string generator function

Published on February 11, 2024 by M. Maxim

PHP Random String Generator Methods

Generating random strings in PHP is a common requirement for many applications , from creating secure passwords and API tokens to generating temporary file names and verification codes. In this tutorial, we'll explore three robust methods to generate random strings in PHP, compare their strengths and weaknesses, and help you choose the best one for your use case.


Why Generate Random Strings?

Random strings are used for a variety of reasons in modern web applications:

  • Session tokens for authentication
  • Password reset codes or email verification links
  • API keys or secret tokens
  • Random filenames for uploads
  • Captcha and security validation

The quality of the randomness, length of the string, and allowed characters all matter when choosing your approach. Let's get into the details.

Method 1: Using bin2hex(random_bytes()) , Cryptographically Secure

		 function generateRandomStringSecure($length = 32) {
    // Each byte generates 2 hex characters
    $bytes = random_bytes($length / 2);
    
    return bin2hex($bytes);
    }

How It Works

  • random_bytes() generates secure random bytes suitable for cryptographic operations.
  • bin2hex() converts those bytes into a hexadecimal string (0-9, a-f).

Pros

  • Cryptographically secure
  • Built into PHP 7+
  • Easy to implement

Cons

  • Output is limited to hexadecimal characters only (0-9, a-f)

Use Cases

This method is best for API tokens, session keys, and other security-related use cases where strong randomness is critical.

Method 2: Using str_shuffle() with a Custom Character Set

		 function generateRandomStringSimple($length = 16) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';

    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[random_int(0, $charactersLength - 1)];
    }

    return $randomString;
}

	

How It Works

  • Defines a custom pool of characters (numbers + uppercase/lowercase letters).
  • Uses random_int() (cryptographically secure) to pick a character randomly from the pool.

Pros

  • Highly customizable (you can include symbols, emojis, or other characters)
  • Produces readable and usable strings for URLs, usernames, etc.

Cons

  • Slightly slower for long strings due to repeated calls to random_int()

Use Cases

Perfect for generating human-readable random strings like usernames, invitation codes, short URLs, and more.

Method 3: Using openssl_random_pseudo_bytes()

		 function generateRandomStringOpenSSL($length = 32) {
    // Each byte generates 2 hex characters
    $bytes = openssl_random_pseudo_bytes($length / 2);

    return bin2hex($bytes);
}

How It Works

  • openssl_random_pseudo_bytes() is similar to random_bytes() and available since PHP 5.3+
  • It generates cryptographically strong random bytes depending on the system’s OpenSSL implementation.

Pros

  • Backwards compatible with PHP 5.3+
  • Good entropy for cryptographic operations

Cons

  • Less preferred than random_bytes() in PHP 7+
  • Not always cryptographically secure on every system (check the boolean return)

Use Cases

Great fallback for legacy systems or servers with PHP < 7 where random_bytes() is not available.

Comparing All Three Methods

Method Security Custom Characters PHP Version Performance
random_bytes() + bin2hex() ✔️ Very secure ❌ No (hex only) 7.0+ ⚡ Fast
Character pool + random_int() ✔️ Secure ✔️ Yes 7.0+ ⚡ Medium
openssl_random_pseudo_bytes() ✔️ Usually secure ❌ No (hex only) 5.3+ ⚡ Fast

Tips for Production Usage

  • Use random_bytes() or random_int() in any modern PHP application.
  • Always validate user input if the random string is being used in URLs or forms.
  • Consider adding prefixes to the generated strings (e.g., usr_, api_, img_) to help categorize them.
  • Store sensitive strings securely in your database using prepared statements and hashing where needed.

Bonus: Generating Random Strings with Symbols and Numbers

		 function generateComplexRandomString($length = 16) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-_=+';
    $charactersLength = strlen($characters);
    $randomString = '';

    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[random_int(0, $charactersLength - 1)];
    }

    return $randomString;
}

	

This variation includes special characters, making it more suitable for passwords and authentication tokens.

Comments (0)

No comments yet. Be the first to comment!

Leave a Comment
Replying to someone's comment. Cancel
949
0
0
Join Our OBS Community

Loading...

Join Now