Email or username:

Password:

Forgot your password?
Top-level
AkhIL

@mittorn @ru @rf
Дефолтовый хэшер предназначен именно для хэшмапов внутри ОЗУ и не должен никак иначе использоваться. Если нужен неизменный хэш - то предполагается использование других реализаций хэшера, вских там sha256 и т.п..

> The internal algorithm is not specified, and so it and its hashes should not be relied upon over releases.
doc.rust-lang.org/std/collecti

А siphash вообще depricated в std.
doc.rust-lang.org/std/hash/str

Таким образом вся ответственность на тех, кто разрабатывает сетевой протокол используя дефолтовый хэшер, вопреки явным указаниям в документации так не делать.

3 comments
  mittorn

@akhil @ru @rf я то это понимаю, но проблема в том, что некоторые чудики решили использовать его в сетевом протоколе - то есть если другая сторона получит от строки другие хэши - протокол сломается. Я пытаюсь имплементировать клиент этого протокола. Я конечно мог бы поменять хэшер с другой стороны, но мне нужна совместимость и со старыми версиями, чтобы можно было тестировать на регрессии, а пересобирать старые версии с отваливающимися крейтами будет ещё сложнее

  AkhIL

@mittorn @ru @rf
Оно всё равно потенциально поломанное, ибо раст не гарантирует совместимость хэшей между версиями самого компилятора.

  mittorn

@akhil @ru @rf да, разумеется.
Я в итоге таки нашёл, почему у меня хэш отличался: в rust в последний байт при хэшировании строки добавлялось 0xFF
Разумеется увидеть это можно было только в сорцах, никто меня об этом не предупредил:
github.com/rust-lang/rust/blob

Go Up