我想在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];
}
答案 0 :(得分:10)
哇,这是一个简单任务的复杂代码!
- (NSData *)random128BitAESKey {
unsigned char buf[16];
arc4random_buf(buf, sizeof(buf));
return [NSData dataWithBytes:buf length:sizeof(buf)];
}
您可能听说过应该使用salt并哈希密码。看起来你对这个建议有点过分了:这里有没有密码,但你的代码仍然会对数据进行盐分和哈希处理!当输入来自arc4random
等安全随机数生成器时,这完全没用。
当然它不会转换为NSString
,因为随机数据不太可能是有效的UTF-8字符串。
答案 1 :(得分:8)
您可能希望使用Apple的随机字节生成器,这被认为比arc4random更安全。
int SecRandomCopyBytes ( SecRandomRef rnd, size_t count, uint8_t *bytes );
对此的一个很好的解释可以在James Carroll的博客文章中找到:
Open Whisper Systems将此用于其受欢迎的安全聊天应用程序信号的iOS版本
答案 2 :(得分:-3)
这可能会有所帮助
- (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;
}