任何人都可以解释“arc4random()”方法是如何工作的?

时间:2013-07-20 13:32:51

标签: objective-c

任何人都可以解释" arc4random()"方法在内部工作?

我的代码在这里:

randomDataName.derivation = [derivationArray objectAtIndex:(arc4random() %derivationCount)];
randomDataName.icon = [iconArray objectAtIndex:(arc4random() % iconCount)];
randomDataName.notes = [notesArray objectAtIndex:(arc4random() % notesCount)];

1 个答案:

答案 0 :(得分:10)

arc4random使用Rivest Cipher 4。与最粗略的Substitution Cipher一样Caesear Cipher。而对于替换,它使用S-box,它显然作为替换框扩展。简单来说,S-Box可以称为查找表,您可以在其中查找字节的替换。详细了解S-boxes

An S-Box

在这里,S-Box可以处于2 ^ 1700个不同的状态(简单来说,它可以提供那么多的变体替换查找表,通常可以衡量密码强度。)。整个过程产生伪随机数,这意味着数字不是真正随机的(我不确定是否实现了真随机数生成。),即数量将取决于确定性的东西。该函数可以为您提供0-4294967296范围内的任何数字。

那么它比普通rand()random()有什么优势?它有更高的范围(希望,比这两个更随机)。但是如果你用来获得一个小的随机数,那么优势就会减少,而且我看到你正在这样做。

[derivationArray objectAtIndex:(arc4random() %derivationCount)]

因此,通过以模数除以arc4random()输出,您将最终结果限制在0 - derivationCount范围内。

还有很多解释!但如果你只想要功能定义,Read the manual!

来自评论

编辑

使用arc4random_uniform()而不是模偏差。仍然无法保证数字不会重复。