在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 );
詹姆斯·卡罗尔(James Carroll)在博客中发现了一个很好的解释:
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; }