如何根据密码生成数组的混洗子集,以便相同的密码输出相同的子集



我的PHP应用程序中有一个数组,我需要开发一个函数,在给定数组和任意字符串密码的情况下,该函数将输出大数组的一个子集。每次使用相同的密码调用函数时,输出的数组的子集和顺序都应该相同。

我可以根据密码生成一个伪随机数,方法是使用MD5之类的哈希的整数值,但我不确定如何使用它:

1) 基于哈希从数组中选择X(固定数字,或者,优选地,由给定范围内的哈希选择的数字)随机项目

2) 根据散列将这些项目打乱/重新排列成一个子集

对于我的实现,冲突是可以接受的,因为数组的大小相对较小。这是一个非常有趣的问题——有人知道如何解决它吗?

对PHP实现不太了解,但我认为一般的算法会使用您的哈希为伪随机数生成器播种。

为伪随机数生成器设定种子可以确保每次获得的伪随机数顺序相同。使用来自种子生成器的第一个伪随机数对数组进行无序排列。然后,使用伪随机数生成器的下一个值来选择一个介于1和数组大小之间的数字;从阵列中切出这些第一CCD_ 1元素。

最新更新