PHP和Mysql中实现哈希表的步骤

roa*_*oa3 5 php mysql hashtable

我是编程语言新手,我正在使用 PHP 和 mysql。我收到一个用 php 做哈希表的作业。我需要做的是,存储用户收集的项目,然后显示它。在网上做了一些研究后,我将在实现哈希表时执行以下步骤,如果我错了,请纠正我:

  1. 设置表格:

    -> 用户表:uid(int[5])、用户名(varchar[128])、item_id(int[8]、items_id_hash(int[50])

    -> 项目表:item_id(int[5])、item_name(varchar[128])、items_id_hash(int[50])

  2. 创建一个哈希函数(如何创建哈希函数?自己创建还是从网上获取?)将键转换为哈希值,然后插入数据库。例如:将 item_id = 001 哈希为哈希值 =(例如)12345。然后插入到 users 表中。

  3. 显示/搜索。从用户处检索哈希值,然后将其与项目表进行比较并显示。

问题:

  1. 我的步骤正确吗?
  2. 在哪里可以找到好的 php 哈希函数?我可以使用 md5 或 sha1 或盐吗?

Sur*_*oot 4

我认为你对哈希表的想法有点[已失效]。哈希表将键分解为相似的列表。例如:基于名字第一个字母的哈希表,所以会有 26 个列表。您的哈希值是名称的第一个字母,这使得搜索速度更快。

md5、sha1 用于派生哈希值,用于验证数据未被篡改。它们通常有 128 位或 160 位版本。因此,它需要 X 数据并通过哈希发送它,以得出一个 128 位字母数字字符串,无论在哪里完成,该字符串都应该相同。这通常是一个安全问题。

编辑:扩展如何派生密钥的问题。

您可以利用数据的模数来创建用于该行的键。在示例 data % X 中,X 是您想要拥有的密钥总数。问题是 X 很难找到;如果您有 20 个项目,那么将 X 变为 20 是可行的,并且可以快速搜索,因为每个项目都有自己的行。但如果您有 1000 个项目,那么执行 % 1000 是不可行的。做一些像 X = 75 这样的事情会更有效。