我的PHP应用程序中有一个数组,我需要开发一个函数,给定数组和任意字符串密码,将输出大数组的混乱子集。每次使用相同的密码调用函数时,输出的数组的子集和顺序应该相同。
我可以通过获取像MD5这样的哈希的整数值来生成基于密码的伪随机数,但我不知道如何使用它来实现:
1)选择X(固定数字,或者,最好是给定范围内的散列选择的数字)基于散列的数组中的随机项
2)根据哈希
将这些项目随机/重新排列成子集对于我的实现,碰撞是可以接受的,因为数组的大小相对较小。这是一个非常有趣的问题 - 任何人都知道如何解决它?
答案 0 :(得分:1)
对PHP实现不太了解,但我认为通用算法将涉及使用您的哈希为一个伪随机数生成器播种。
播种伪随机数生成器可确保每次获得的伪随机数的顺序相同。使用种子生成器中的第一个伪随机数对阵列进行混洗。然后,使用伪随机数生成器的下一个值来选择1和数组大小之间的数字;切掉数组中的第一个n
元素。