Невозможно сгенерировать ключ 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];
Другие вопросы по тегам