Hasher
Хэш-функция поставляеся с maptype и принимает два аргумента: непосредственно сам ключ, и сид. И вот сид есть довольно интересная вещь, целью которой является предотвращение вектора атак на хэшфункцию, суть которой заключается в нахождении коллизий так, чтобы заставить хэшмапу работать неэффективно, облегчая тем самым DoS (или же DDoS как множественные одиночные попытки DoS). Сид берётся из генератора псевдослучайных чисел, и назначается в момент инициализации мапы.
С итерацией вообще всё интересно. Помимо того, что из-за разного сида одни и те же ключи будут давать разный хэш, и, соответственно, попадать в разные бакеты, добавляется ещё и элемент неожиданности в виде старта итерации с рандомного бакета. Ну, то есть, итератор-то обойдёт все бакеты с начала до конца по порядку, только начало его лежит в рандомном месте. Тобишь, где-то у нас будет "разлом": первое значение из не-пустого бакета будет идти после последнего. Зачем это надо - я даже представить не могу, если честно. Отсюда берётся разность последовательностей при итерировании одной и той же мапы несколько раз, умноженная на рандомизацию позиций вхождений из-за рандомного сида для каждой мапы (хоть и насколько я слышал, если одновременно две мапы инстанциировать, то и сид у них может быть одинаковый - но в этом я не сильно уверен).
Post #498
241