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 内部使用该类,它提供了三个静态成员函数,允许用户获取哈希值并进行重置。

QHash QHashSeed 和 () 函数实现了所谓的 "加盐散列"。这样做的目的是,不同的应用程序和同一应用程序的不同实例会对相同的输入产生不同的散列值,从而导致 中元素的排序无法被外部观察者预测。这样,应用程序就能更好地抵御试图迫使散列表进入退化模式的攻击。qHash QHash

大多数应用程序不需要直接处理散列种子,因为QHash 会在需要时进行处理。不过,应用程序可能希望以与QHash 相同的方式将其用于自己的目的:作为应用程序全局随机值(也可参见QRandomGenerator )。请注意,如果调用resetRandomGlobalSeed() 函数,全局哈希种子可能会在应用程序生命周期内发生变化。全局哈希值的用户需要存储他们正在使用的值,而不是依赖于再次获取该值。

该类还实现了将哈希种子设置为确定值的功能,qHash() 函数会认为这意味着它们也应在数据上使用固定的哈希函数。该功能仅用于调试程序。也可以通过将QT_HASH_SEED 环境变量设置为零(任何其他值都将被忽略)来控制这种行为。

另请参阅 QHashQRandomGenerator

成员函数文档

[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 设置为零,调用此函数将导致无操作。

Qt XML 从未在应用程序执行期间调用此函数,但除非QT_HASH_SEED 变量设置为 0,否则globalSeed() 返回的哈希种子将是一个随机值,就像调用了此函数一样。

注意:此函数是线程安全的

[static] void QHashSeed::setDeterministicGlobalSeed()

强制 Qt XML 散列种子为确定值(零),并要求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.