有没有人知道从mozilla firefox使用的URL生成哈希的缓存映射哈希函数是什么?我已经找到了这个http://benlast.livejournal.com/29164.html,它提供了一个非常好的示例代码,不幸的是我认为它已经过时并且在当前版本的Firefox中不再使用了。 任何帮助将不胜感激。
答案 0 :(得分:2)
您可以在此处查看Firefox使用的哈希算法:http://hg.mozilla.org/mozilla-central/file/09935ede3c77/netwerk/cache/nsDiskCacheDevice.cpp#l272。它非常简单,但与您链接的不同(我检查过,Firefox 3.5和Firefox 3.6之间发生了变化)。从本质上讲,它似乎将URL视为无符号整数序列(little-endian,必要时用零填充)并将它们添加到变量a
,b
和c
(前后数字为a
,第二和第五为b
,第三和第六为c
)。然后将这三个变量组合在函数hashmix()
中。
a
和b
的初始值为0x9e3779b9
,c
的值稍微复杂一些 - 它作为参数出现。所有呼叫者都使用此参数的默认值,但该值为0(请参阅nsDiskCache.h
)。
我想http://burtleburtle.net/bob/hash/evahash.html可能会提供有关所用算法的更多信息。