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

时间:2011-06-10 05:13:38

标签: php arrays algorithm shuffle

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

我可以通过获取像MD5这样的哈希的整数值来生成基于密码的伪随机数,但我不知道如何使用它来实现:

1)选择X(固定数字,或者,最好是给定范围内的散列选择的数字)基于散列的数组中的随机项

2)根据哈希

将这些项目随机/重新排列成子集

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

1 个答案:

答案 0 :(得分:1)

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

播种伪随机数生成器可确保每次获得的伪随机数的顺序相同。使用种子生成器中的第一个伪随机数对阵列进行混洗。然后,使用伪随机数生成器的下一个值来选择1和数组大小之间的数字;切掉数组中的第一个n元素。