NSMutableData для NSString - PullRequest
       20

NSMutableData для NSString

0 голосов
/ 28 ноября 2018

Привет всем Я работаю с симметричным шифрованием в своем приложении для шифрования сообщений, которые пользователи отправляют друг другу.Сейчас я пытаюсь создать достаточно безопасный ключ для расшифровки этих данных (ключ дешифрования) с помощью NSMutableData.В настоящее время у меня есть два вопроса:

  1. Достаточно ли безопасен 256-битный ключ для расшифровки?

  2. У меня есть некоторые проблемы с NSString.Когда я хочу получить строковое значение NSMutableData, мой NSLog всегда возвращает мне нулевое значение

Где я делаю неправильно?

NSMutableData *masterKey = [NSMutableData dataWithLength:32];
    int result = SecRandomCopyBytes(kSecRandomDefault, 32, masterKey.mutableBytes);
    if (result != noErr) {
        NSLog(FAILED_MASTERKEY);
        return;
    }
NSLog(@"MASTER %@",[[NSString alloc] initWithData:masterKey encoding:NSUTF32StringEncoding]);

2018-11-28 16:06:31.803868+0100 [41860:9341804] MASTER (null)

1 Ответ

0 голосов
/ 28 ноября 2018

Вы не можете создать NSString напрямую из произвольных двоичных данных.Альтернативы варьируются от отображения шестнадцатеричного представления (например, из метода description) до использования другого текстового представления двоичных данных (например, base-64).Но вы не можете просто передать случайные двоичные данные в -[NSString initWithData:encoding:].

NSLog(@"Hex:     %@", [masterKey description]);
NSLog(@"Hex:     %@", masterKey);                                   // directly logging the `NSData` will also use its `description`
NSLog(@"Base 64: %@", [masterKey base64EncodedStringWithOptions:0]);

. Обычный метод обмена двоичными данными через веб-сервис - base-64.Но если цель состояла в том, чтобы просто зарегистрировать значение, чтобы вы могли видеть, что действительно, значение было сгенерировано, то просто записать его description проще всего.

...