Zend\Math\Randは、ランダムな値を取得できるよ、という非常にわかりやすい機能を持つクラスです。
mt_srand()とかと何が違うのかというと、ランダムっぽい処理が色々使えるということでしょうか。
getBoolean()はtrueかfalse、getInteger()は整数値、getFloat()は0から1のfloat値、getString()は文字列を返してくれます。
実際はどれも内部でgetBytes()を呼び出しており、その結果を色々整形して返しています。
getBytes()はopenssl_random_pseudo_bytes() → mcrypt_create_iv() → chr(mt_rand(0, 255))の順で、使用可能な暗号化関数を用いてランダム値を生成します。
これでランダムな文字列が欲しくなったので自力で作ったはいいが実は何処かに脆弱性があった、なんて羽目にならなくて済むでしょう。
ちなみにどうでもいいのですが、Zend\Math\Randは継承するクラスもないのにあえてabstractクラスにすることによって、インスタンスの生成を防いでいるようです。
そんな使い方があったのか。
mt_srand()とかと何が違うのかというと、ランダムっぽい処理が色々使えるということでしょうか。
<?php
require_once('path/to/channel/vendor/autoload.php');
// true/false
$strBoolean = Zend\Math\Rand::getBoolean();
// int
$randInt = Zend\Math\Rand::getInteger(0, 1000);
// float
$randFloat = Zend\Math\Rand::getFloat();
// 文字列 [A-Za-z0-9+/]
$randString = Zend\Math\Rand::getString(50);
// 引数の文字だけを使う
$randString2 = Zend\Math\Rand::getString(50, '0123456789abcdef');
// バイト列
$strBytes = Zend\Math\Rand::getBytes(50);
見てのとおり、簡単にランダムな値を得ることができました。getBoolean()はtrueかfalse、getInteger()は整数値、getFloat()は0から1のfloat値、getString()は文字列を返してくれます。
実際はどれも内部でgetBytes()を呼び出しており、その結果を色々整形して返しています。
getBytes()はopenssl_random_pseudo_bytes() → mcrypt_create_iv() → chr(mt_rand(0, 255))の順で、使用可能な暗号化関数を用いてランダム値を生成します。
これでランダムな文字列が欲しくなったので自力で作ったはいいが実は何処かに脆弱性があった、なんて羽目にならなくて済むでしょう。
ちなみにどうでもいいのですが、Zend\Math\Randは継承するクラスもないのにあえてabstractクラスにすることによって、インスタンスの生成を防いでいるようです。
そんな使い方があったのか。
PR