[解決済み] PHP で single use トークンを生成する: random_bytes と openssl_random_pseudo_bytes のどちらを使用しますか?
質問
PHPでシングルユーストークンを生成する必要があります。これには、同じことを行うように見える2つの関数が利用できます。
ランダムバイト
と
openssl_random_pseudo_bytes
. 例えば
random_bytes
:
var_dump(bin2hex(random_bytes(12)));
--> string(24) "338f489ec37a2c2b4943905d"
を使用し
openssl_random_pseudo_bytes
:
var_dump(bin2hex(openssl_random_pseudo_bytes(12)));
--> string(24) "1c7febea20029bd524fba8e7"
openssl_random_pseudo_bytes
はPHP5.3以上(なのでもっと前からあると思われます)、そして
random_bytes
はPHP 7です。私はPHP7を使用しているので、どちらを使っても大丈夫です。
では、この2つの間に大きな(あるいは小さな)違いがあるのでしょうか?ないのであれば、私は
random_bytes
単に名前が簡単だから(=コードが読みやすいから)。
どのように解決するのですか?
openssl_random_pseudo_bytes
は OpenSSL 拡張の一部であり、明示的に指定する必要があります。
を設定し、インクルードします。
を PHP のコンパイル時に使用し、外部からの依存性を必要とします。
random_bytes
は、PHP 7 で新しく導入された、常に利用可能な PHP 独自のランダムバイト生成方式で、利用するプラットフォームに応じて内部のランダム性を選択します。
を導入した主な理由は
random_bytes
開発者はプラットフォームを意識する必要があり、どの拡張モジュールやシステムレベルの関数が利用可能かによって、いくつかの異なるフォールバックメソッドを使用する可能性があるからです。これはしばしば個々の実装のバグにつながり、特にセキュリティに関連するコードでは気になるところです。
random_bytes
は、常に利用可能で、利用可能な最も良いランダム性の源を使用する1つの関数を提供することによって、これを簡素化します。もし、PHP 7+ のみをターゲットにしているのなら、この方法を使用すべきです。
関連
-
[解決済み】Weird PHP error: 'Can't use function return value in write context'.
-
[解決済み] [Solved] Fatal error: 非オブジェクトのメンバ関数fetch_assoc()の呼び出し [重複]。
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み] JavaScriptでランダムな文字列/文字を生成する
-
[解決済み] 乱数(int)を生成する方法を教えてください。
-
[解決済み] JavaScriptで2つの数値の間の乱数を生成する
-
[解決済み] 0から9までのランダムな整数を生成する
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み】PHPパスワードのハッシュとソルトの安全性について
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PHP & MySQL: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given [重複] PHP & MySQL: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given.
-
[解決済み] コマンドの同期がとれていない。
-
[解決済み】予期せぬ例外。SQLSTATE[HY000] [1045] Access denied for user ****@'localhost' (using password: YES)
-
[解決済み】pdo - 非オブジェクトのメンバー関数prepare()への呼び出し【重複】。
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: パラメータが定義されていません
-
[解決済み】Laravel 5.2 Storage::makeDirectory($dir) でディレクトリが作成されない。
-
[解決済み】PHPの予期しないT_VARIABLEとは何ですか?
-
[解決済み] Uncaught Error: 未定義の関数 mysql_escape_string() の呼び出し。
-
[解決済み] PHP 未定義関数への呼び出し