3 * The URandom Random Number Source
5 * This uses the *nix /dev/urandom device to generate medium strength numbers
9 * @category PHPCryptLib
12 * @author Anthony Ferrara <ircmaxell@ircmaxell.com>
13 * @copyright 2011 The Authors
14 * @license http://www.opensource.org/licenses/mit-license.html MIT License
15 * @version Build @@version@@
18 namespace CryptLib\Random\Source
;
20 use CryptLib\Core\Strength
;
23 * The URandom Random Number Source
25 * This uses the *nix /dev/urandom device to generate medium strength numbers
27 * @category PHPCryptLib
30 * @author Anthony Ferrara <ircmaxell@ircmaxell.com>
33 class URandom
implements \CryptLib\Random\Source
{
36 * @var string The file to read from
38 protected $file = '/dev/urandom';
41 * Return an instance of Strength indicating the strength of the source
43 * @return Strength An instance of one of the strength classes
45 public static function getStrength() {
46 return new Strength(Strength
::MEDIUM
);
50 * Generate a random string of the specified size
52 * @param int $size The size of the requested random string
54 * @return string A string of the requested size
56 public function generate($size) {
57 if ($size == 0 ||
!file_exists($this->file
)) {
58 return str_repeat(chr(0), $size);
60 $file = fopen($this->file
, 'rb');
62 return str_repeat(chr(0), $size);
64 if (function_exists('stream_set_read_buffer')) {
65 stream_set_read_buffer($file, 0);
67 $result = fread($file, $size);