rych/random

PHP 的随机数据生成器

v0.1.0 2013-11-12 03:36 UTC

This package is auto-updated.

Last update: 2024-08-23 10:53:01 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

此库旨在为 PHP 5.3+ 提供生成加密安全随机数据的简洁接口。

安装

通过 Composer

$ composer require rych/random

用法

此库易于快速启动。将自动选择并配置适用于您的平台的最优随机数据源。

<?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);

如果您希望以十六进制格式接收随机字节,我们也可以这样做

<?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);

生成器

此库支持多种 CSPRNG。可以使用生成器工厂类 Rych\Random\Generator\GeneratorFactory 自动发现并选择适用于当前平台的最优选项。

MCrypt (Rych\Random\Generator\MCryptGenerator)

MCrypt 通过 mcrypt_create_iv() 函数提供了对标准操作系统 CSPRNG 的接口。在 Windows 系统上,此函数将使用 Windows CryptoAPI,而其他操作系统将读取 /dev/urandom。此后端需要启用 PHP 的 MCrypt 扩展。

这是首选的后端,如果可用,将默认选择。

OpenSSL (Rych\Random\Generator\OpenSSLGenerator)

OpenSSL 通过 openssl_random_pseudo_bytes() 函数提供 CSPRNG。支持此后端需要 PHP 的 OpenSSL 扩展可用。由于 PHP OpenSSL 实现中的漏洞,Windows 服务器还需要运行 PHP 版本 >= 5.3.7,否则此函数可能会执行缓慢或甚至挂起。

OpenSSL 后端是次选后端,如果可用,将选择它。

CAPICOM (Rych\Random\Generator\CapicomGenerator)

尽管 Microsoft 已经 弃用了 CAPICOM 接口,但库目前仍支持旧接口。支持需要在启用了 COM 扩展的 Windows 服务器上运行。

请注意,如果可用,MCrypt 后端将使用新的 Windows CryptoAPI 访问 Windows 内置的 CSPRNG。OpenSSL 后端将在 PHP 版本 >= 5.4.0 上做同样的事。

由于 CAPICOM 已弃用,它只能在 Windows 系统上没有 MCrypt 或 OpenSSL 后端的情况下选择。

/dev/urandom (Rych\Random\Generator\URandomGenerator)

此后端支持大多数非 Windows 平台上内置的非阻塞 CSPRNG。支持需要在非 Windows 平台上读取 /dev/urandom。

如果非 Windows 系统上没有 MCrypt 或 OpenSSL 后端,将选择此后端。

George Argyros 的时钟漂移算法 (Rych\Random\Generator\ClockDriftGenerator)

无法使用上述任何后端的系统将使用此一个。它提供纯 PHP 的 CSPRNG,尽管它相当慢。

此后端没有特殊要求,因此总是可用。

测试

$ vendor/bin/phpunit -c phpunit.dist.xml

安全

如果您发现任何与安全相关的问题,请通过电子邮件 rchouinard@gmail.com 反馈,而不是使用问题跟踪器。

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件