RNCryptor encryptData возвращает ноль

Новичок в iOS-разработчике, пытающийся работать над кодированием данных для безопасного хранения данных в db.

Я нашел текущий пример здесь: https://github.com/RNCryptor/RNCryptor-objc

Это мой код.

NSString * aPassword =@"tempkey";

NSData *data = [@"Data" dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSData *encryptedData = [RNEncryptor encryptData:data
                                    withSettings:kRNCryptorAES256Settings
                                        password:aPassword
                                           error:&error];


NSLog(@"Data: %@", [[NSString alloc] initWithData:encryptedData encoding:NSUTF8StringEncoding]);

Мой журнал

2016-10-20 11:41:52.662 BlueBoard[57245:10027277] Data: (null)

Я пропустил шаг в этом процессе? Я подтвердил, что он нулевой, потому что БД также хранится как нулевой.


person Airagale    schedule 20.10.2016    source источник
comment
Используйте параметр error, чтобы увидеть, что пошло не так.   -  person Andy Ibanez    schedule 20.10.2016
comment
encryptedData не ноль. Ваша ошибка заключается в попытке преобразовать encryptedData в NSString. encryptedData не является строковыми данными в кодировке UTF-8.   -  person rmaddy    schedule 20.10.2016
comment
@AndyIbanez У меня была проверка ошибок, и она не печатала ошибку.   -  person Airagale    schedule 20.10.2016
comment
@rmaddy Как я могу определить, в какой кодировке он находится?   -  person Airagale    schedule 20.10.2016
comment
@rmaddy прав. Это не закодированная строка. Вы не можете преобразовать его в строку, потому что это не так. Если вы хотите распечатать зашифрованный BLOB-объект, просто напечатайте сам encryptedData. Я не уверен, почему вы хотите это сделать, но если вы хотите что-то увидеть, это путь.   -  person Andy Ibanez    schedule 20.10.2016


Ответы (1)


Ваша проблема не в том, что encryptedData является nil, а в том, что вы пытаетесь создать NSString из данных, которые не представляют собой строку.

Если вы хотите преобразовать encryptedData в строку для хранения или других целей, вы должны преобразовать данные в представление в кодировке Base 64. Сделайте это с помощью метода base64EncodedStringWithOptions:.

NSString *base64String = [encryptedData base64EncodedStringWithOptions:0];

Конечно, когда вы захотите расшифровать строку позже, вам нужно будет преобразовать строку, закодированную в Base 64, обратно в NSData, а затем расшифровать эти данные.

person rmaddy    schedule 20.10.2016
comment
Я подозревал, что это как-то связано с кодировкой, прежде чем вы упомянули в комментарии ранее, но я не был уверен, как определить, какая кодировка. Спасибо за помощь! - person Airagale; 20.10.2016