Rych Random Data Library
![Software License][ico-license]
![Coverage Status][ico-coveralls]
![Total Downloads][ico-downloads], (*1)
This library aims to provide a clean interface to generating cryptographically
secure random data in PHP 5.3+., (*2)
Install
Via Composer, (*3)
``` bash
$ composer require rych/random, (*4)
## Usage
The library is easy to get up and running quickly. The best source of random
data available for your platform will be automatically selected and configured.
```php
<?php
$random = new Rych\Random\Random();
// Generate a 16-byte string of random raw data
$randomBytes = $random->getRandomBytes(16);
// Get a random integer between 1 and 100
$randomNumber = $random->getRandomInteger(1, 100);
// Get a random 8-character string using the
// character set A-Za-z0-9./
$randomString = $random->getRandomString(8);
If you prefer your random bytes delivered in hex format, we can do that too:, (*5)
<?php
$encoder = new Rych\Random\Encoder\HexEncoder();
$random = new Rych\Random\Random();
$random->setEncoder($encoder);
// Generate a 16-byte string of random raw data,
// encoded as a 32-character hex string
$randomBytes = $random->getRandomBytes(16);
Generators
The library provides support for several CSPRNGs. The generator factory class
Rych\Random\Generator\GeneratorFactory
can be used to automatically discover
and select the best available option for the current platform., (*6)
MCrypt (Rych\Random\Generator\MCryptGenerator)
MCrypt provides an interface to standard operating system CSPRNGs through the
mcrypt_create_iv()
function. On Windows systems, this function will use the
Windows CryptoAPI, while other operating systems will read from /dev/urandom
.
This backend requires PHP's MCrypt extension to be enabled., (*7)
This is the preferred backend, and will be selected by default if it is
available., (*8)
OpenSSL (Rych\Random\Generator\OpenSSLGenerator)
OpenSSL provides a CSPRNG through the openssl_random_pseudo_bytes()
function.
Support for this backend requires that PHP's OpenSSL extension be available.
Windows servers also have the requirement of running PHP versions >= 5.3.7 due
to a bug in the PHP OpenSSL implementation which could cause the function to
perform slowly or even hang., (*9)
The OpenSSL backend is the second preferred backend, and will be selected if it
is available., (*10)
Although Microsoft has deprecated the CAPICOM interface,
the library currently supports the old interface. Support requires running on
a Windows server with the COM extension enabled., (*11)
It should be noted that the MCrypt backend, if available, will use the newer
Windows CryptoAPI to access Windows' built-in CSPRNG. The OpenSSL backend will
do the same on PHP versions >= 5.4.0., (*12)
As CAPICOM is deprecated, it will only be selected if neither the MCrypt or
OpenSSL backends are available on Windows systems., (*13)
/dev/urandom (Rych\Random\Generator\URandomGenerator)
The built-in non-blocking CSPRNG on most non-Windows platforms is supported
by this backend. Support requires read-access to /dev/urandom on non-Windows
platforms., (*14)
This backend will only be selected if neither the MCrypt or OpenSSL backends are
available on non-Windows systems., (*15)
Systems which cannot use any of the above backends will use this one. It
provides a CSPRNG in pure PHP, although it is pretty slow., (*16)
This backend has no special requirements, and is therefore always available., (*17)
Testing
bash
$ vendor/bin/phpunit -c phpunit.dist.xml
, (*18)
Security
If you discover any security related issues, please email rchouinard@gmail.com instead of using the issue tracker., (*19)
License
The MIT License (MIT). Please see License File for more information., (*20)