-1

谁能解释“arc4random()”方法在内部是如何工作的?

我的代码在这里:

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

1 回答 1

10

arc4random使用Rivest Cipher 4。它是一个替代密码,就像最粗俗的凯撒密码一样。对于替换,它使用 S-boxes,它显然扩展为替换框。简单来说,S-Box 可以称为查找表,您可以在其中查找字节替换。阅读更多关于S-box 的信息。

S盒

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

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

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

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

还有很多解释!但如果您只想要函数定义,请阅读手册!.

从评论编辑:

而不是模偏差,使用arc4random_uniform(). 仍然不能保证这些数字不会重复。

于 2013-07-20T14:06:48.393 回答