Be careful when setting the 'strong' parameter to true.
If you system doesn't have enough entropy your script will block which can cause timeouts in other parts of your code.
In my case, the most serious symptom was my script blocking when trying to read from /dev/random and causing a 'MySQL has gone away' error.
Hopefully this saves someone the trouble when deciding to use /dev/random entropy
OAuthProvider::generateToken
(PECL OAuth >= 1.0.0)
OAuthProvider::generateToken — ランダムなトークンを生成する
説明
final public static string OAuthProvider::generateToken
( int
$size
[, bool $strong = false
] )擬似乱数を使ってランダムなバイトの文字列を生成します。
パラメータ
-
size -
トークンの長さ。バイト単位で指定します。
-
strong -
TRUEに設定すると、エントロピーとして /dev/random を使います。 それ以外の場合は、ブロックされることのない /dev/urandom を使います。 このパラメータは、Windows では無視されます。
返り値
生成されたトークンをバイト文字列で返します。
エラー / 例外
strong パラメータが TRUE のときは、
(十分な量の初期ランダムデータがなかったなどの理由で)
代替 rand() 実装を使うことになった場合に
E_WARNING レベルのエラーが発生します。
例
例1 OAuthProvider::generateToken() の例
<?php
$p = new OAuthProvider();
$t = $p->generateToken(4);
echo strlen($t), PHP_EOL;
echo bin2hex($t), PHP_EOL;
?>
上の例の出力は、 たとえば以下のようになります。
4 b6a82c27
注意
注意:
十分な量のランダムデータがシステムから得られなかった場合、この関数は PHP の rand() 関数の実装を使って残りのバイトを埋めます。
参考
- openssl_random_pseudo_bytes() - 疑似乱数のバイト文字列を生成する
- mcrypt_create_iv() - 乱数ソースから初期化ベクトル(IV)を生成する
carlosouza at me dot com
28-Mar-2012 11:32
