QHashSeed 结构体
头文件 | #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 | globalSeed() |
void | resetRandomGlobalSeed() |
void | setDeterministicGlobalSeed() |
详细描述
QHashSeed 类用于传递 QHash 种子。它内部由 QHash 使用,并提供了三个静态成员函数,以便用户获取和重置种子。
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
设置为零,则此函数返回的值将为零。
注意:此函数是线程安全的。
[静态]
void QHashSeed::resetRandomGlobalSeed()
将 Qt 哈希种子重置为新随机值。调用此函数不是必需的,但长期运行的应用程序在有关其哈希信息可能被潜在攻击者暴露的长时间后可能希望这样做。
如果环境变量 QT_HASH_SEED
设置为零,调用此函数将没有任何操作。
Qt 在应用程序执行期间永远不会调用此函数,除非将 QT_HASH_SEED
变量设置为 0,否则由 globalSeed() 返回的哈希种子将是一个随机值,就像调用此函数一样。
注意:此函数是线程安全的。
[静态]
void QHashSeed::setDeterministicGlobalSeed()
强制将 Qt 哈希种子设置为确定性值(零),并要求qHash()函数使用预先确定的哈希函数。这种模式仅适用于调试,不应在生产代码中使用。
可以通过调用 resetRandomGlobalSeed() 来恢复常规操作。
注意:此函数是线程安全的。
[constexpr noexcept]
size_t QHashSeed::operator size_t() const
将返回的哈希种子转换为 size_t
。
© 2024 Qt 公司有限公司。本文件中包含的文档贡献的版权归其所有者所有。本文件提供的文档根据GNU自由文档许可证版本1.3许可,由自由软件基金会出版。Qt及其相关标志是芬兰及其它国家和地区的The Qt Company有限公司的商标。所有其他商标均为其所有者的财产。