首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以将整数随机化,这样访问者就不能弄清楚对象的顺序

有没有一种方法可以将整数随机化,这样访问者就不能弄清楚对象的顺序
EN

Stack Overflow用户
提问于 2009-12-30 00:09:55
回答 3查看 179关注 0票数 1

我在网址里有个id。因此,通常它将是一个自动编号,因此它将是1,2,3,4,5,.....

我不想让访问者弄清楚序列,所以我想让数字有点随机。所以我希望将1转换为174891,将2转换为817482,依此类推。但我希望它在1到1,000,000的特殊范围内。

我想我可以通过对整数的位进行异或和移位来做到这一点。但我想知道这是否已经在某些地方实现了。

谢谢

EN

回答 3

Stack Overflow用户

发布于 2009-12-30 00:13:12

您可以将您的整数作为种子传递给随机数生成器。(只需确保它是唯一的)

您还可以生成整数的SHA-512c散列并使用它。

但是,这里最好的做法是使用GUID而不是整数。

编辑:如果需要可逆,正确的方法是使用AES或不同的加密算法对数字进行加密。但是,这不会产生一个介于1和100万之间的数字。

票数 6
EN

Stack Overflow用户

发布于 2009-12-30 00:30:36

不要依赖于模糊性--即非连续的ids -来保证安全性。构建你的应用,这样即使有人猜到了下一个id,它仍然是安全的。

但是,如果您确实需要非连续If。每次随机生成一个新的id。将其作为索引(唯一)列与自动生成的主键id一起存储在表中。然后,您所需要做的就是查找该列,以获取真实的id。

票数 5
EN

Stack Overflow用户

发布于 2009-12-30 00:30:38

编辑:总的来说,我更喜欢tvanfosson在这两个分数上的方法。然而,这是对所述问题的答案...

老实说,这些是相当奇怪的设计约束--但它们相当容易处理:

随机选取一个任意的RNG种子,你将在每次执行你的程序时使用它,

  • 创建一个实例,使用这个种子创建一个整数数组
  1. 使用随机数组创建一个“反向映射”数组,方法是遍历原始的数组,如下所示:

int[] reverseMapping =新intmapping.Length;for (int i= 0;i< mapping.Length;i++) { reverseMapping[mappingi] =i+ 1;}

然后,您可以映射这两种方式。无可否认,这依赖于Random使用的算法不变...如果这是一个问题,您可以始终生成此映射一次,并将其保存在某个地方。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1975392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档