我在网址里有个id。因此,通常它将是一个自动编号,因此它将是1,2,3,4,5,.....
我不想让访问者弄清楚序列,所以我想让数字有点随机。所以我希望将1转换为174891,将2转换为817482,依此类推。但我希望它在1到1,000,000的特殊范围内。
我想我可以通过对整数的位进行异或和移位来做到这一点。但我想知道这是否已经在某些地方实现了。
谢谢
发布于 2009-12-30 00:13:12
您可以将您的整数作为种子传递给随机数生成器。(只需确保它是唯一的)
您还可以生成整数的SHA-512c散列并使用它。
但是,这里最好的做法是使用GUID而不是整数。
编辑:如果需要可逆,正确的方法是使用AES或不同的加密算法对数字进行加密。但是,这不会产生一个介于1和100万之间的数字。
发布于 2009-12-30 00:30:36
不要依赖于模糊性--即非连续的ids -来保证安全性。构建你的应用,这样即使有人猜到了下一个id,它仍然是安全的。
但是,如果您确实需要非连续If。每次随机生成一个新的id。将其作为索引(唯一)列与自动生成的主键id一起存储在表中。然后,您所需要做的就是查找该列,以获取真实的id。
发布于 2009-12-30 00:30:38
编辑:总的来说,我更喜欢tvanfosson在这两个分数上的方法。然而,这是对所述问题的答案...
老实说,这些是相当奇怪的设计约束--但它们相当容易处理:
随机选取一个任意的RNG种子,你将在每次执行你的程序时使用它,
int[] reverseMapping =新intmapping.Length;for (int i= 0;i< mapping.Length;i++) { reverseMapping[mappingi] =i+ 1;}
然后,您可以映射这两种方式。无可否认,这依赖于Random使用的算法不变...如果这是一个问题,您可以始终生成此映射一次,并将其保存在某个地方。
https://stackoverflow.com/questions/1975392
复制相似问题