std :: string_view хэширование времени компиляции

Кажется std :: hash functions для C ++ 17 string_view не являются constexpr.

Мне кажется, что строковое представление, привязанное к const char [], может быть хешировано во время компиляции (что было бы очень мило), или есть что-нибудь, что мешает этому?

4

Решение

Начиная с C ++ 14 (см. 17.6.3.4 Требования к хешу, таблица 26), мы имеем:

Возвращаемое значение должно зависеть только от аргумента k для продолжительности
программы. [Примечание: Таким образом, все оценки выражения h (k) с
то же самое значение для к дает тот же результат для данного исполнения
программа
. — конечная нота]

Два разные исполнения могут давать разные хэши:

Хеш-функции требуются только для получения того же результата для
тот же вход в рамках одного исполнения программы;
это позволяет соленые хэши, которые предотвратить столкновения DoS-атак.

Такое поведение полезно смягчить DoS-атаки на основе хэш-атак.

подробности

Вот формулировка о требованиях Hash Концепция из стандарта C ++ 17:

Возвращаемое значение должно зависеть только от аргумента k
на время программы. [Примечание: таким образом, все
оценки выражения h (k) с одинаковыми
значение для к дает тот же результат для
данное исполнение программы. — конец примечания]

В нем ничего не говорится о случайном хешировании. std::hash текст не обязателен и не исключает случайного хеширования.

история

Вот N3242 2011-02-28 проект, в котором не упоминается «на время действия программы»:

Не будет бросать исключения. Возвращаемое значение зависит только от
на аргументе к. [Примечание: при этом все оценки выражения h (k)
с тем же значением для k дают тот же результат. — конец примечания

Мы можем видеть, что добавление «для продолжительности программы» «для данного выполнения программы» было добавлено в качестве разрешения для »2291. std :: hash уязвим для коллизионной DoS-атаки».

На практике

AFAIU, нет реализации std::hash реализует случайное хеширование, но вы можете написать свой собственный my::secure_hash,

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]