生成url的唯一哈希键

时间:2011-05-16 06:51:44

标签: c++ boost hash

我想生成网址的唯一哈希密钥。 atm我正在使用boost hash

  std::size_t seed = 0;
  boost::hash_combine(seed, host);
  boost::hash_combine(seed, path);
  boost::hash_combine(seed, query); 
  boost::hash_combine(seed, fragment);

但是哈希键经常重复...... :(

http://www.finanzen.de/geldanlage-boerse.html  9223372036854775807                  
http://www.finanzen.de/geldanlage-china.html   9223372036854775807

有人有SIMPLE替代方案吗?

2 个答案:

答案 0 :(得分:4)

我认为该代码中没有错误。这个虚拟示例的哈希值不同:

#include <boost/functional/hash.hpp>
#include <cstdio>

int main()
{
    size_t seed = 0;
    std::string s1("www.finanzen.de");
    std::string s2("geldanlage-boerse.html");
    std::string s3("geldanlage-china.html");

    boost::hash_combine(seed, s1);
    boost::hash_combine(seed, s2);
    fprintf(stdout, "%016lx\n", seed);

    seed = 0;
    boost::hash_combine(seed, s1);
    boost::hash_combine(seed, s3);
    fprintf(stdout, "%016lx\n", seed);
    return 0;
}

现在,如果您的hostpath等等char*,并且您正在重复使用这些指针,那么您获得的结果就会变得很明显。 hash_value char*没有超载9223372036854775807。所以进入计算的唯一事情就是指针值本身(具体是如何定义)。 (请参阅hash reference的最底部。)

其他观点:此0x7fffffffffffffff 值非常特殊。它的十六进制表示为:

{{1}}

所以你可能在你发布的内容中看不到转换/溢出问题。

答案 1 :(得分:0)

尝试使用为C

实现的一些md5函数