Невозможно сгенерировать ключ AES 256 из пароля и соли для использования с RNCryptor
Я хочу сгенерировать ключ с помощью Salt для шифрования AES 256. Я использую BBASE lib, по этой ссылке: создайте случайный 128-битный ключ шифрования AES в iOS
Мой код:
NSData* salt = [BBAES randomDataWithLength:BBAESSaltDefaultLength];
NSData *key = [BBAES keyBySaltingPassword:@"password" salt:salt keySize:BBAESKeySize256 numberOfIterations:BBAESPBKDF2DefaultIterationsCount];
NSLog(@"Data ASE Key %@",key);
NSString *aString = [[NSString alloc] initWithData:key encoding:NSUTF8StringEncoding];
Я хочу использовать этот "ключ" в следующем коде:(здесь я использую RNCryptor lib)
NSData *encryptedData = [ RNEncryptor encryptData:bodyData withSettings:kRNCryptorAES256Settings password:aString error:&error];
NSData *decryptedData = [RNDecryptor decryptData:encryptedData withSettings:kRNCryptorAES256Settings password:aString error:&error];
Мне нужно передать ключ типа NSString, но когда я конвертирую NSData в NSString, он дает значение NULL, и мое приложение вылетает. Что я должен делать?? Есть ли решение для этого?
2 ответа
Не все данные являются допустимой строкой UTF-8, большинство случайных данных - нет. По сути, именно поэтому Base64 существует для преобразования 8-битных данных в строку ASCII - и обратно. Есть конечно и другие методы.
Но, как утверждает Дункан, почему? Прочитайте код RNCryptor, он уже обрабатывает преобразование пароля (строки) в безопасный ключ.
Спасибо @Duncan & @Zaph:) Я нашел решение!!
Вместо
NSString *aString = [[NSString alloc] initWithData:key encoding:NSUTF8StringEncoding];
Я использовал это:
NSString *aString = [[NSString alloc] initWithData:key encoding:NSASCIIStringEncoding];