我已经看到这个问题了很多但从未见过真正的具体答案.所以我将在这里发布一个,希望能帮助人们理解为什么在使用随机数生成器时会出现"模数偏差",就像rand()在C++中一样.
使用arc4random()时可以设置一系列数字吗?例如仅50-100.
这是我提出的代码:
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)另外,如果我想在某天制作大量的琴弦,有更快的方法吗?这似乎很慢,因为它每次都通过循环创建一个对象.
我的代码是从0到1的随机数字.我看到数字1的出现次数远远超过数字0然后我认为在统计上是可能的.
这是我的代码:
int shipNumber = arc4random() % 2;
Run Code Online (Sandbox Code Playgroud)
该代码应该有效吗?我只是疯了吗?
我想在ios中创建随机AES加密密钥(128位).我搜索过但我找不到一个好的答案.请给我一些建议.提前致谢.
更新:
我用过BBAES lib.我使用下面的代码生成加密密钥,但是当我从NSData转换为NSString时,它显示为NULL
-(NSData*)randomDataWithLength{
NSData* salt = [BBAES randomDataWithLength:BBAESSaltDefaultLength];
NSData *key = [BBAES keyBySaltingPassword:@"password" salt:salt keySize:BBAESKeySize128 numberOfIterations:BBAESPBKDF2DefaultIterationsCount];
NSLog(@"Data ASE Key %@",key);
NSString *aString = [[NSString alloc] initWithData:key encoding:NSUTF8StringEncoding];
}
Run Code Online (Sandbox Code Playgroud) 我试过这个:
NSInteger numberFinal = 100000000000000000 + ((float)arc4random() / UINT32_MAX) * (999999999999999999 - 100000000000000000);
Run Code Online (Sandbox Code Playgroud)
但它返回零...我不想指定范围,但只想要任何18位数的数字......
objective-c ×5
ios ×4
arc4random ×2
random ×2
aes ×1
c++ ×1
cocoa-touch ×1
iphone ×1
modulo ×1
security ×1