Структура QHashSeed
| Заголовок: | #include <QHashSeed> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) 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.
Документация по функциям-членам
QHashSeed::QHashSeed(size_t data = 0)
Создаёт новый объект QHashSeed, используя data в качестве зерна.
[static] QHashSeed QHashSeed::globalSeed()
Возвращает текущее глобальное зерно хеширования QHash. Возвращаемое значение этой функции будет равно нулю, если была вызвана функция setDeterministicGlobalSeed() или если переменная среды QT_HASH_SEED установлена в ноль.
Примечание: Эта функция безопасна для многопоточных операций.
[static] void QHashSeed::resetRandomGlobalSeed()
Перезадаёт зерно Qt хеширования на новое случайное значение. Вызов этой функции не является обязательным, но приложения с длительным выполнением могут это сделать после длительного периода, в котором информация о хеше могла быть раскрыта потенциальным злоумышленникам.
Если переменная среды QT_HASH_SEED установлена в ноль, вызов этой функции приведёт к бездействию.
Qt никогда не вызывает эту функцию во время выполнения приложения, но если переменная QT_HASH_SEED не установлена в 0, зерно хеширования, возвращаемое функцией globalSeed(), будет случайным значением, как если бы эта функция была вызвана.
Примечание: Эта функция безопасна для многопоточных операций.
[static] void QHashSeed::setDeterministicGlobalSeed()
Принудительно устанавливает зерно Qt хеширования на детерминированное значение (ноль) и запрашивает функции qHash() использовать предопределённую функцию хеширования. Этот режим полезен только для отладки и не должен использоваться в коде производства.
Нормальную работу можно восстановить, вызвав resetRandomGlobalSeed().
Примечание: Эта функция безопасна для многопоточных операций.
size_t QHashSeed::operator size_t() const
Преобразует возвращаемое зерно хеширования в size_t.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qhashseed.html