QHashSeed Struct

ヘッダ #include <QHashSeed>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
以来:Qt 6.2

パブリック関数

QHashSeed(size_t data = 0)
size_t operator size_t() const

静的パブリックメンバ

詳細な説明

QHashSeed クラスは、QHash シードを伝達するために使用されます。これはQHash によって内部的に使用され、ユーザがハッシュを取得したりリセットしたりできるように、3 つの静的メンバ関数を提供しています。

QHash および () 関数は、"塩漬けハッシュ" と呼ばれるものを実装しています。この意図は、異なるアプリケーションや同じアプリケーションの異なるインスタンスが、同じ入力に対して異なるハッシュ値を生成することで、 の要素の順序を外部のオブザーバーが予測できないようにすることである。これにより、ハッシュテーブルを強制的に縮退モードにしようとする攻撃に対するアプリケーションの耐性が向上する。qHash QHash

QHash ほとんどのアプリケーションは、ハッシュシードを直接扱う必要はないだろう。しかし、アプリケーションは、QHash と同じように、アプリケーション・グローバル乱数値として、これを独自の目的で使用したいと思うかもしれない(ただし、QRandomGenerator も参照のこと)。グローバルハッシュのシードは、resetRandomGlobalSeed ()関数が呼び出された場合、アプリケーションの有効期間中に変更される可能性があることに注意。グローバル・ハッシュの使用者は、使用している値を保存し、再取得に依存しないようにする必要があります。

このクラスは、ハッシュ・シードを決定論的な値に設定する機能も実装しています。qHash() 関数は、データにも固定のハッシュ関数を使用する必要があることを意味します。この機能は、デバッグ・アプリケーションでのみ使用することを想定しています。この動作は、QT_HASH_SEED 環境変数をゼロに設定することでも制御できる(それ以外の値は無視される)。

QHash およびQRandomGeneratorも参照のこと

メンバー関数ドキュメント

[constexpr] QHashSeed::QHashSeed(size_t data = 0)

data をシードとして新しい QHashSeed オブジェクトを構築する。

[static noexcept] QHashSeed QHashSeed::globalSeed()

現在のグローバルシードQHash を返す。この関数が返す値は、setDeterministicGlobalSeed() が呼び出された場合、またはQT_HASH_SEED 環境変数がゼロに設定されている場合、ゼロになる。

注意:この関数はスレッドセーフである。

[static] void QHashSeed::resetRandomGlobalSeed()

Qt ハッシュシードを新しいランダムな値に戻します。この関数を呼び出す必要はありませんが、長時間動作するアプリケーションでは、ハッシュに関する情報が潜在的な攻撃者に公開されている可能性がある長い期間の後に、この関数を呼び出したくなることがあります。

環境変数QT_HASH_SEED がゼロに設定されている場合、この関数を呼び出すと no-op になります。

Qt はアプリケーションの実行中にこの関数を呼び出すことはありませんが、QT_HASH_SEED 変数が 0 に設定されていない限り、globalSeed() が返すハッシュシードは、この関数が呼び出されたかのようにランダムな値になります。

注意:この関数はスレッドセーフです。

[static] void QHashSeed::setDeterministicGlobalSeed()

Qt ハッシュのシードを決定論的な値 (ゼロ) に強制し、qHash() 関数にあらかじめ決められたハッシュ関数を使うように要求します。このモードはデバッグにのみ有効で、実運用コードでは使用しないでください。

resetRandomGlobalSeed() を呼び出すことで、通常の動作に戻すことができる。

注意:この関数はスレッドセーフである。

[constexpr noexcept] size_t QHashSeed::operator size_t() const

返されたハッシュシードをsize_t に変換します。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.