【发布时间】:2023-10-01 07:06:01
【问题描述】:
我有一个增量增加 id 的数据库。我需要一个函数将该 id 转换为 0 到 1000 之间的唯一数字。(实际最大值要大得多,但只是为了简单起见。)
1 => 3301,
2 => 0234,
3 => 7928,
4 => 9821
生成的号码不能重复。 它不能是增量的。 需要动态生成(而不是创建要读取的统一数字表)
我认为是散列函数,但有可能发生冲突。 随机数也可能有重复。 我需要一个最小的完美哈希函数,但找不到简单的解决方案。
【问题讨论】:
-
如果您将 0 到 1000 之间的数字转换为 0 到 1000 之间的另一组数字,您将任意将一个数字映射到另一个数字。增量 ID 有什么问题?
-
这正是我需要做的......从一个集合转换到另一个集合,但我不知道一个简单的函数来完成这个。需要转换 id 的原因是因为我的老板想创建一个网站来通过这个唯一的 id 搜索数据库。他认为,如果人们知道它是增量的,他们可以增量地进行搜索以找到数据库中的每一项。
-
人们无法找到所有项目有多重要?如果使用某种散列函数,有人可能会发现散列函数,然后无论如何都会增量搜索。为了使这在密码学上真正安全,您要么需要生成随机的东西并存储它,要么使用其他人无法获得的密钥加密 id。
-
我同意,但这就是他想要的。每个 id 将采用 01-****** 的形式,起初我只是将数字转换为十六进制,例如 01-0002af,但他认为从中数太容易了。它不必非常安全,我猜他认为普通人不会尝试破解哈希。
标签: mysql