uniqidはどのようにユニークなのですか?
質問
この質問は、本当に解決策を探している問題ではなく、もっと単純な好奇心の問題なのです。 PHP の uniqid 関数には、出力を "よりユニークにするための more entropy フラグがあります。 more_entropyがtrueのときとそうでないときで、この関数が同じ結果を2回以上出す可能性はどのくらいあるのだろうかと疑問に思ったのです。 言い換えれば、more_entropyが有効なときと無効なときで、uniqidはどのくらい違うのでしょうか? more_entropyを常に有効にしておくことの欠点はありますか?
どのように解決するのですか?
2014年3月更新。
まず、重要なのは
uniqid
は一意な ID を保証しないので、少し誤った呼び方です。
につきまして PHP ドキュメント :
警告!
この関数はランダムな文字列や予測不可能な文字列を生成するものではありません。この この関数は、セキュリティのために使用してはいけません。暗号学的に安全な 安全なランダム関数/ジェネレータと暗号的に安全なハッシュ関数を使用してください。 を使用してください。
そして
この関数は暗号的に安全なトークンを生成しません。 実際、追加のパラメータを渡さなければ、返り値は とはほとんど変わりません。 microtime() . 暗号化された安全なトークンを生成する必要がある場合は 暗号化された安全なトークンを生成する必要がある場合は openssl_random_pseudo_bytes() .
ドキュメントによると、more-entropy を true に設定すると、よりユニークな値が生成されますが、実行時間が長くなります (程度はごくわずかですが)。
TRUEに設定された場合、uniqid()は追加のエントロピーを(結合線形合同生成器を使用して)追加します。 を使用した) 追加のエントロピーを返り値の末尾に追加します。 を追加し、結果が一意である可能性を高めます。
行に注目してください。
increases the likelihood that the result will be unique
であり、それではなく、意志
保証する
の一意性を保証するものではありません。
一意性のために、ある点までは「無限に」努力することができ、任意の数の暗号化ルーチンを使って強化することができ、さらに 塩 などを使用して強化することができます - それは目的に依存します。
特にPHPのメイントピックのコメントを見てみることをお勧めします。
http://www.php.net/manual/en/function.uniqid.php#96898
http://www.php.net/manual/en/function.uniqid.php#96549
http://www.php.net/manual/en/function.uniqid.php#95001
私がお勧めするのは、体を鍛えることです。 なぜ セキュリティのため(つまり、暗号化/スクランブルルーチンに追加するため)なのか?また どのように 一意である必要があるのでしょうか? 最後に、速度の検討を見てください。適性は根本的な検討事項で変わってきます。
関連
-
[解決済み】move_uploaded_fileは、「failed to open stream: Permission denied" というエラーが出る
-
[解決済み】XAMPPエラー: www.example.com:443:0 サーバー証明書に、サーバー名と一致するIDが含まれていません。
-
[解決済み】phpのシンタックスエラー、予期しないT_IFエラーを修正する方法は?[クローズド]。
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] ある文字列が特定の単語を含んでいるかどうかを確認するにはどうすればよいですか?
-
[解決済み] YouTube APIからYouTubeビデオのサムネイルを取得する方法を教えてください。
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】XAMPPのphpMyAdminで「設定にあるcontroluserの接続に失敗しました。
-
[解決済み】XAMPPエラー: www.example.com:443:0 サーバー証明書に、サーバー名と一致するIDが含まれていません。
-
[解決済み】既に開始されているPHPセッション【重複あり
-
[解決済み] * vchiqインスタンスを開くのに失敗しました。
-
[解決済み】phpMyAdmin: シークレットパスフレーズ?
-
[解決済み] PHP - ストリームを開くのに失敗しました : そのようなファイルまたはディレクトリがありません。
-
[解決済み】警告: file_get_contents(): https:// ラッパーがサーバー構成ですべて無効になっています。
-
[解決済み] PHP 未定義関数への呼び出し
-
[解決済み] $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて
-
[解決済み] PHPでパスワードをハッシュ化するためにbcryptを使用するにはどうすればよいですか?