在iOS中创build随机的128位AESencryption密钥

我想在ios中创build随机的AESencryption密钥(128位)。 我已经在search,但我找不到一个好的答案。 请给我一些build议。 提前致谢。

更新:

我已经使用BBAES库。 我使用下面的代码来生成encryption密钥,但是当我从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]; } 

哇,这是一个简单的任务复杂的代码!

 - (NSData *)random128BitAESKey { unsigned char buf[16]; arc4random_buf(buf, sizeof(buf)); return [NSData dataWithBytes:buf length:sizeof(buf)]; } 

你可能听说过你应该用盐和散列你的密码。 它看起来像你这个build议有点太远了:这里没有密码 ,但你的代码仍然盐和散列的数据! 当input来自像arc4random这样的安全随机数发生器时,这是完全没有用的。

当然,它不会转换为NSString因为随机数据不太可能是有效的UTF-8string。

您可能想要使用苹果公司的随机字节发生器,这被认为比arc4random更安全。

 int SecRandomCopyBytes ( SecRandomRef rnd, size_t count, uint8_t *bytes ); 

https://developer.apple.com/library/ios/documentation/Security/Reference/RandomizationReference/index.html#//apple_ref/c/func/SecRandomCopyBytes

詹姆斯·卡罗尔(James Carroll)在博客中发现了一个很好的解释:

http://jamescarroll.xyz/2015/09/09/safely-generating-cryptographically-secure-random-numbers-with-swift/

Open Whisper Systems将其用于iOS版本stream行的安全聊天应用程序Signal

这可能有帮助

 - (NSString *)getRandomKey{ NSString *alphabet = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY0123456789/=+"; NSMutableString *s = [NSMutableString stringWithCapacity:20]; for (NSUInteger i = 0; i < 20; i++) { u_int32_t r = arc4random() % [alphabet length]; unichar c = [alphabet characterAtIndex:r]; [s appendFormat:@"%C", c]; } NSLog(@"%@", s); NSString *key = s; return key; }