Dom*_*ber 7 hash path utf-16 collision hash-collision
我有一个Unicode/UTF-16编码路径.路径分隔符是U + 005C'\'.路径是以空值终止的根相对Windows文件系统路径,例如"\ windows\system32\drivers\myDriver32.sys"
我想将此路径哈希为64位无符号整数.它并不需要是"加密的声音".散列应该不区分大小写,但能够处理非ascii字母.显然,哈希也应该散布好.
我有一些想法:
A)使用Windows文件标识符作为"哈希".在我的情况下,我确实希望在文件移动时更改哈希值,因此这不是一个选项.
B)只需使用常规的sting哈希:hash + = prime*hash + codepoint作为整个字符串.
我确实感觉可以利用路径由"segements"(文件夹名称和最终文件名)组成的事实.
总结需求:
1)64位散列
2)文件系统路径的良好分布/少碰撞.
3)高效
4)不需要安全
5)不区分大小写
加密安全哈希在速度方面可能不是很有效,但几乎任何编程语言都有可用的实现。
使用它们对于您的应用程序是否可行取决于您对速度的依赖程度 - 基准测试将为您提供适当的答案。
您可以在路径上使用此类哈希的子字符串,例如 MD5,之前转换为小写,以便哈希实际上不区分大小写(要求您使用知道如何转换所有 UTF 的小写方法-16个文件系统中可能出现的非标准字符)。
无论您采用哪个子字符串部分,加密安全哈希都具有相当均匀分布的优点,因为它们被设计为不可预测,即理想情况下,哈希的每个部分都依赖于整个哈希数据,就像它的任何其他部分一样。
| 归档时间: |
|
| 查看次数: |
2746 次 |
| 最近记录: |