我有一个Unicode/UTF-16编码的路径。路径分隔符为U+005C“\”。 这些路径是以根目录为基础的Windows文件系统路径,例如"\windows\system32\drivers\myDriver32.sys"。
我想将此路径哈希成64位无符号整数。 它不需要是“加密安全”的。 哈希应该是大小写不敏感的,但能够处理非ASCII字母。 显然,哈希也应该散布得很好。
我有一些想法:
A)使用Windows文件标识符作为“哈希”。在我的情况下,如果文件被移动,我确实希望哈希值发生变化,因此这不是一个选项。
B)只需使用常规字符串哈希:对于整个字符串,哈希=素数*哈希+代码点。
我觉得路径由“段”(文件夹名称和最终文件名)组成这一事实可以利用。
总结需求:
1)64位哈希
2)适用于文件系统路径的良好分布/少碰撞。
3)高效
4)不需要安全
5)大小写不敏感