У меня есть Unicode / UTF-16 кодированный путь .ограничителями пути является U + 005C '\'.Пути - это корневые относительные пути файловой системы Windows, оканчивающиеся нулем, например, "\ windows \ system32 \ drivers \ myDriver32.sys"
Я хочу хэшировать этот путь в 64-битный без знака целое число. не нужно , чтобы быть "криптографически обоснованным" .Хэши должны быть без учета регистра , но способны обрабатывать не-ascii буквы.Очевидно, хеш также должен хорошо разбрасываться.
Есть некоторые идеи, которые у меня были:
A) Использование идентификатора файла Windows в качестве "хэша".В моем случае я хочу, чтобы хеш изменился, если файл был перемещен, так что это не вариант.
B) Просто используйте обычный строковый хеш: hash + = prime * hash + codepoint для всей строки.
У меня такое ощущение, что путь состоит из "сегментов"(имена папок и окончательное имя файла) могут быть использованы.
Подводя итог:
1) 64-битный хеш
2) хорошее распределение / несколько коллизий для путей файловой системы.
3) эффективное
4) недолжен быть безопасным
5) регистронезависимым