QHashSeed Struct

Header: #include <QHashSeed>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Since: 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 に変換します。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。