【问题标题】:What is this hash function?这个哈希函数是什么?
【发布时间】:2011-06-04 12:38:10
【问题描述】:

我正在对一个旧游戏使用的存档文件格式进行逆向工程,发现它使用以下函数(手动反编译)对文件名进行哈希处理:

int hash(char* filename) {
  unsigned int a = 0;
  int b = 0;
  for(int i = strlen(filename)-1; i>=0; i--)
   char c = toupper(filename[i]);
   a=(a<<5)+(a>>25);
   b+=c;
   a+=b+c;
  }
  return a;
}

我想知道这是什么标准,还是只是开发人员随机挑选的东西。

【问题讨论】:

  • 你能告诉我们这是哪一年的比赛吗?相当现代的随机数生成函数基于相同的想法
  • 它看起来类似于 Shift-Add-XOR 哈希,但有额外的添加而不是 XORing;一些现有的哈希算法见eternallyconfuzzled.com/tuts/algorithms/…
  • 对我来说看起来像任何旧的拇指吸盘哈希函数。 a &lt;&lt; 5 ^ a &gt;&gt; 27 很常见。

标签: c reverse-engineering


【解决方案1】:

它不代表任何标准的哈希函数,只是简单的“手工”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2010-09-07
    • 2014-12-22
    • 2016-12-10
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多