iOS中使用随机数

本文主要对随机数的概念和iOS中对随机数的简单使用做一个小结。一次和一同事谈到随机数的问题,发现之前在iOS中还真没怎么用过,后来了解了一下,做一个简要的整理。

在谈及随机数的时候,我们需要知道我们的计算机都是比较“死”的,生成数字的方式也一定是“死”的。也就是说,通常情况下我们提到的随机数,实际上是“伪”随机数。我们通常使用时间作为随机数生成器的种子,他们看起来满足随机的特性,但若自己追究是可以得到他们特定的计算方法的,因此对于加密等安全方面使用时,需要多加考虑。

iOS的随机数生成是在系统层面实现的C函数,在usr/include的stdlib.h标准库头文件中声明,在使用时无需额外的import。

在stdlib.h中声明的随机数相关的函数有很多,包括rand()、random()、arc4random()等,这3个均是无参的,我们就拿比较简单的rand()来说。

rand()的返回值是int行,即能生成整数型范围的随机数,在使用前需要设定随机数生成器的种子,通常用时间,对应的函数调用为:

srand(time(0));

而获取随机数则根据需求调用对应的rand()函数取模:

int r = rand() % 29 + 1;

如上,就是取1~29的随机整数。

上面还提到了random()和arc4random():

  • random()的返回值是long
  • arc4random()的返回值是u_int32_t,即无符号32位

除此之外就是他们的随机数生成器种子设置方式不同,算法实现上也不一样,像arc4random这个名字所描述的,这个是用RC4算法得到的。

对于安全方面使用随机数的,可以参看苹果Security Framework中提供的Randomization Service:

Randomization Service Reference

相关文章:

此条目发表在 iOS, iOS开发基础 分类目录,贴了 , , , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>