1

我有一个自动递增的 id(一个 int),我想将其转换为不太“可开采”的东西。基本上,我不希望人们能够访问 data/0、data/1、data/2 等并破坏我们的整个数据库。我正在考虑只是对 ID 进行哈希处理,但我不确定是否可以保证唯一性。

假设价值范围是从 1 到几亿。可能其中一种哈希算法可以保证这些参数内的唯一性。

如果没有,采取什么好方法?

我确实考虑过散列,然后附加 ID。

我试图避免使用 GUID,因为它需要对现有代码进行大量更改,所以我更愿意转换我拥有的数据。

编辑:

为了进一步解释这种情况 - 这些是受到打击的静态资源。我不必去数据库并反转它或对照其他东西查找它。想象一下产品列表 - 用户可能有指向特定页面的链接,但我不希望他们能够以编程方式浏览每个页面,因此我需要一个非递增 ID。

4

2 回答 2

0

据我所知,散列旨在根据一些具体数据(例如姓名、姓氏等)创建唯一 ID。散列自动递增 ID 不会对您有太大帮助。如果有人通过输入一个自动递增的 ID 搜索您的数据库,该 ID 将作为参数传递给哈希函数,他仍然会得到他想要的数据。所以我认为更好的解决方案是散列一些其他数据以获得唯一的 ID。如果您这样做,那么搜索您的数据库的人将必须知道存储在其中的确切数据(例如,他必须知道您员工的确切姓名或他的 SSN)。

希望有帮助!

于 2012-09-28T21:51:40.983 回答
0

如果不需要反向查找,请在散列之前使用伪随机值对值进行加盐。

于 2012-12-05T05:22:38.023 回答