F # underneat использует стандартные функции хеширования .NET.У них есть специальное рандомизированное начальное число, применяемое при каждом запуске нового процесса (или AppDomain в старой платформе .NET).Это делает их непоследовательными в разных процессах.Причиной этого является безопасность: оставление хэша без изменений было бы уязвимостью, которую можно использовать, например, для.детерминированные хеш-атаки.
Если вы хотите иметь быстрые согласованные хэши, вам понадобится что-то вроде Murmur3 или CityHash.Они очень быстро хэшируют любую последовательность байтов и обеспечивают довольно хорошее предотвращение столкновений.Однако они не поддерживаются "из коробки" в F # / .NET.
Если вы хотите использовать что-то, что уже существует в стандартной библиотеке .NET, вы, вероятно, можете использовать MD5, но имейте в виду, что это скоростьгораздо слабее, чем два выше.Он также считается более подверженным столкновениям.