这是在iPhone上生成随机字符串的好方法吗?

And*_*son 7 security objective-c ios

这是我提出的代码:

NSString *randomString = @"";
for (int x=0;x<NUMBER_OF_CHARS;x++) {
  randomString = [randomString stringByAppendingFormat:@"%c", (char)(65 + (arc4random() % 25))];
}
return randomString;
Run Code Online (Sandbox Code Playgroud)

编辑:

回答评论:

1)我最关心的是代码的简洁性.

2)我也想知道这是否是对猜测的字符串的安全,和/或对碰撞的证据,如果NUMBER_OF_CHARS是高数(说40) - 不是为了这个申请,但在其他情况下.

3)另外,如果我想在某天制作大量的琴弦,有更快的方法吗?这似乎很慢,因为它每次都通过循环创建一个对象.

das*_*ght 9

如果NUMBER_OF_CHARS是编译时常量,则可以通过避免重复创建对象来加速代码.您也可以将程序缩短一行:

char data[NUMBER_OF_CHARS];
for (int x=0;x<NUMBER_OF_CHARS;data[x++] = (char)('A' + (arc4random_uniform(26))));
return [[NSString alloc] initWithBytes:data length:NUMBER_OF_CHARS encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

据我所知,arc4random_uniform对于加密应用程序应该足够好,但如果您计划保护的数据对您或特别是对您的客户具有高价值,您可能需要咨询加密专家.

编辑:编辑回应nielsbot的评论.

  • 从技术上讲,这将受到模偏差的影响.比照 http://stackoverflow.com/a/6194148/210171 (3认同)