函数

GLibHashFunc

声明

guint
(* GHashFunc) (
  gconstpointer key
)

描述 [源代码]

指定当 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() 可能会使你的应用程序容易受到 算法复杂度攻击 的攻击。

选择良好哈希函数的关键是不可预测性。即使是加密哈希,当余数取模一个相当可以预测的质数时,也很容易找到碰撞。必须有一个攻击者无法猜到的随机元素。

参数

类型: gconstpointer

一个键。

参数可以是 NULL
由函数的调用方拥有这些数据。

返回值

类型: guint

对应于该键的哈希值。