函数
GLibHashFunc
描述 [源代码]
指定当 g_hash_table_new()
创建 GHashTable
时传递给它的哈希函数的类型。
一个键传递给了该函数,并且该函数应该返回一个 #guint 哈希值。当键分别是 #gpointer、 #gint 和 #gchar 时,函数 g_direct_hash()
、g_int_hash()
和 g_str_hash()
提供了可被使用的哈希函数。
g_direct_hash()
也是形式为 GINT_TO_POINTER (n)
(或类似宏)键的相应哈希函数。
一个好的哈希函数应该会生成在相当大的范围内均匀分布的哈希值。模运算取哈希表大小(质数)以找到放置每个键的“桶”。该函数也应该非常快,因为它在每次键查找时都会被调用。
请注意,GLib 提供的哈希函数具有这些特点,但对于会导致哈希冲突的制造键并不是特别健壮。因此,在使用带有源于不受信任数据(例如 HTTP 请求)的键的 GHashTable 时,你应考虑选择一个更安全的哈希函数。在该情况下使用 g_str_hash()
可能会使你的应用程序容易受到 算法复杂度攻击 的攻击。
选择良好哈希函数的关键是不可预测性。即使是加密哈希,当余数取模一个相当可以预测的质数时,也很容易找到碰撞。必须有一个攻击者无法猜到的随机元素。