search
HomeBackend DevelopmentPHP ProblemHow to use cryptographic pseudo-random number generator with PHP

This article will introduce to you how to use encrypted pseudo-random number generator in PHP. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to everyone.

How to use cryptographic pseudo-random number generator with PHP

Today we will introduce the encrypted pseudo-random number generator (CSPRNG extension) in PHP . The generation of random numbers is actually very simple, just use the rand() or mt_rand() function, but what we are talking about today is a set of random number generators that use a more complex algorithm. rand() is no longer recommended. mt_rand() generates faster and is now a mainstream function. The encrypted pseudo-random number generation function is cryptographically secure and slightly slower than mt_rand(). It needs to rely on some functions of the operating system, which we will talk about later.

This encryption extension has been integrated in PHP7 and does not require special installation. If it is a version below PHP7, you need to install the extension independently. If you can't find the functions described below when testing, check your current PHP version.

Pseudo-random character generation

var_dump(bin2hex(random_bytes(5)));
// string(10) "f28dc2bdd5"
var_dump(random_bytes(5));
// string(5) "�"��"

random_bytes() Each call will generate a binary string with different content, and the parameter is the binary byte length. The binary data obtained directly is in garbled format, so generally we need to use bin2hex() to convert the binary into a hexadecimal format string that we can understand. However, the result is that the hexadecimal character length after our conversion is twice the character length we set. The function of this function can generate a secure user password salt, key keyword or initialization vector for us.

random_bytes() Each call will generate a string with different content, and the parameter is a random character of character length. Here we pass 5 and return 10 characters. It can be seen that this parameter is The number of characters, and what is returned is actually the number of bytes, corresponding to the return form in which one character occupies two bytes. Or we can just remember that it returns twice the parameters. As for the role of this function, it can generate a secure user password salt, key keyword or initialization vector for us.

Pseudo-random integer generation

var_dump(random_int(100, 999));
var_dump(random_int(-1000, 0));
// int(900)
// int(-791)

For the generation of integer numbers, it is even simpler. Just provide two parameters for the random_int() function, which is the range of random integers. In fact, the usage is the same as mt_rand().

Generation source

The generation source of the above two encrypted pseudo-random functions depends on the operating system, as follows:

  • In Windows system , the CryptGenRandom() function will be used. Starting from 7.2.0, when using CNG-API

  • on Linux systems, the Linux getrandom(2) system call

  • will be used on other systems. Will use /dev/urandom

  • Otherwise an exception will be thrown

Exception situation

These two functions also have corresponding Abnormal situations will occur. For example, if the generation source cannot be found above, an exception will be thrown. Of course, in addition to this, there will be other factors that will also cause exceptions to occur.

  • If no suitable source of randomness is found, an exception will be thrown

  • If the given parameters are invalid, a TypeError will be raised

  • If the given byte length is invalid, an error will be raised

Summary

Today's content is very simple, and also found With the instant use of the random_bytes() function, you no longer need to write a function to randomly generate salt by yourself. Just like in our article about password salting, what is "salting" a password? How to safely "salt" your user passwords? The random character generation function (generateSalt) can basically be replaced by this. Don’t you feel that you have gained a lot? The pace of learning never stops. Let’s continue to explore more interesting content together! !

Test code:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202007/source/PHP%E7%9A%84%E5%8A%A0%E5%AF%86%E4%BC%AA%E9%9A%8F%E6%9C%BA%E6%95%B0%E7%94%9F%E6%88%90%E5%99%A8%E7%9A%84%E4%BD%BF%E7%94%A8.php

Recommended learning: php video tutorial

The above is the detailed content of How to use cryptographic pseudo-random number generator with PHP. For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:segmentfault. If there is any infringement, please contact admin@php.cn delete
ACID vs BASE Database: Differences and when to use each.ACID vs BASE Database: Differences and when to use each.Mar 26, 2025 pm 04:19 PM

The article compares ACID and BASE database models, detailing their characteristics and appropriate use cases. ACID prioritizes data integrity and consistency, suitable for financial and e-commerce applications, while BASE focuses on availability and

PHP Secure File Uploads: Preventing file-related vulnerabilities.PHP Secure File Uploads: Preventing file-related vulnerabilities.Mar 26, 2025 pm 04:18 PM

The article discusses securing PHP file uploads to prevent vulnerabilities like code injection. It focuses on file type validation, secure storage, and error handling to enhance application security.

PHP Input Validation: Best practices.PHP Input Validation: Best practices.Mar 26, 2025 pm 04:17 PM

Article discusses best practices for PHP input validation to enhance security, focusing on techniques like using built-in functions, whitelist approach, and server-side validation.

PHP API Rate Limiting: Implementation strategies.PHP API Rate Limiting: Implementation strategies.Mar 26, 2025 pm 04:16 PM

The article discusses strategies for implementing API rate limiting in PHP, including algorithms like Token Bucket and Leaky Bucket, and using libraries like symfony/rate-limiter. It also covers monitoring, dynamically adjusting rate limits, and hand

PHP Password Hashing: password_hash and password_verify.PHP Password Hashing: password_hash and password_verify.Mar 26, 2025 pm 04:15 PM

The article discusses the benefits of using password_hash and password_verify in PHP for securing passwords. The main argument is that these functions enhance password protection through automatic salt generation, strong hashing algorithms, and secur

OWASP Top 10 PHP: Describe and mitigate common vulnerabilities.OWASP Top 10 PHP: Describe and mitigate common vulnerabilities.Mar 26, 2025 pm 04:13 PM

The article discusses OWASP Top 10 vulnerabilities in PHP and mitigation strategies. Key issues include injection, broken authentication, and XSS, with recommended tools for monitoring and securing PHP applications.

PHP XSS Prevention: How to protect against XSS.PHP XSS Prevention: How to protect against XSS.Mar 26, 2025 pm 04:12 PM

The article discusses strategies to prevent XSS attacks in PHP, focusing on input sanitization, output encoding, and using security-enhancing libraries and frameworks.

PHP Interface vs Abstract Class: When to use each.PHP Interface vs Abstract Class: When to use each.Mar 26, 2025 pm 04:11 PM

The article discusses the use of interfaces and abstract classes in PHP, focusing on when to use each. Interfaces define a contract without implementation, suitable for unrelated classes and multiple inheritance. Abstract classes provide common funct

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.