【问题标题】:What hashing algorithm is HashData in Shlwapi.dll based on?Shlwapi.dll中的HashData基于什么哈希算法?
【发布时间】:2017-04-19 03:47:22
【问题描述】:

有人知道Shlwapi.dll中的HashData是基于什么算法的吗?

我已经尝试查看文档,但它确实没有提供有关底层实现的线索。

我看到HashData 将来自{0,1}* 的数据映射到给定的输出大小,所以它有点让我想起所谓的哈希函数生成器。

我不需要加密安全哈希函数,只需要一个用于实现某些数据结构的函数。

【问题讨论】:

  • 这是一些简单、快速且无名的散列。不是强加密哈希。什么问题?
  • 你想从你的哈希中得到什么?
  • 只是哈希值的合理分布。正在寻找 CRC32 或类似的东西。
  • 有很多 CRC32 实现,但这是您想要的字典哈希吗?
  • 为什么实施很重要?您是否尝试过并确定它不适用于您的目的?请注意,Microsoft 不保证会这样做。如果您需要一个满足特定要求的实现,您应该编写自己的一个或使用另一个库。这些函数是 shell 助手,主要是为了司法强制的公平性而导出的。

标签: windows algorithm winapi hash


【解决方案1】:

如果你真的需要知道,在文件 path.c 中的 Wine 源代码树中有一个实现,目前位于 https://source.winehq.org/source/dlls/kernelbase/path.c#4956

这显然是我在这里实现的哈希的变体:https://www.rpi.edu/locker/23/000723/parcel/rlt-portlib/lib/SymT/SymT_hash.c

该文件中的注释提供参考:

这个散列函数来自 1990 年 6 月的 Communications of the ACM,第 33 卷,第 6 期,第 677-680 页,作者 Peter K. Pearson。这使用 与本文一起打印的排列。

使用 Window 的 HashData 函数可以与 Windows 的某些部分(尤其是 shell)使用的哈希兼容。如果您需要与 Windows 的兼容性或互操作性,这非常有用。否则它不会是我对哈希函数的首选,如果我认为我可能需要支持其他平台,也不会考虑。

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    相关资源
    最近更新 更多