任何人都可以解释"arc4random()"方法如何在内部工作?
我的代码在这里:
randomDataName.derivation = [derivationArray objectAtIndex:(arc4random() %derivationCount)];
randomDataName.icon = [iconArray objectAtIndex:(arc4random() % iconCount)];
randomDataName.notes = [notesArray objectAtIndex:(arc4random() % notesCount)];
Run Code Online (Sandbox Code Playgroud)
Jes*_*ese 10
arc4random使用Rivest Cipher 4.它是一个替代密码,就像最粗糙的Caesear Cipher.而对于替换,它使用S-box,它显然作为替换框扩展.简单来说,S-Box可以被称为查找表,您可以在其中查找字节的替换.阅读有关S-box的更多信息.
在这里,S-Box可以处于2 ^ 1700个不同的状态(简单来说,它可以提供多个变量替换查找表,通常可以衡量密码强度.).整个过程产生伪随机数,这意味着数字不是真正随机的(我不确定是否实现了真正的随机数生成.),即数量将取决于确定性的东西.该功能可以为您提供0-4294967296范围内的任何数字.
那它有什么优势超过正常rand()和random()?它有更高的范围(希望,比这两个更随机).但是,如果你使用一个小的随机数,优势就会减少,我看到你正在这样做.
[derivationArray objectAtIndex:(arc4random() %derivationCount)]
Run Code Online (Sandbox Code Playgroud)
因此,通过以模数除以arc4random()输出,您将最终结果限制为0 - derivationCount的范围.
并且有很多解释!但是如果你只是想要功能定义,请阅读手册!.
从评论中编辑:
而不是模偏差,使用arc4random_uniform().仍然无法保证数字不会重复.
| 归档时间: |
|
| 查看次数: |
872 次 |
| 最近记录: |