Путаница с шифрованием Objective-C - с предупреждением / ошибкой, как я могу это исправить? - PullRequest
0 голосов
/ 31 июля 2011

Я шифрую текстовую строку, используя следующий блок кода. Этот код относится к методу AES256EncryptWithKey, но когда я запускаю проект и нажимаю кнопку, использующую этот код, я получаю необработанное исключение и предупреждение. В предупреждении говорится: «NSString может не отвечать на: '-AES256EncryptWithKey'". Что я могу сделать? Можно ли поместить кусок кода, который обрабатывает исключения? Или это что-то совершенно другое?

NSString *Input  = [Inputbox text];
    [Input AES256encryptWithKey];

Вот код, который я использовал, который относится к AES256EncryptWithKey:

@implementation NSData (AES256)

- (NSData *)AES256EncryptWithKey:(NSString *)key {
    // 'key' should be 32 bytes for AES256, will be null-padded otherwise
    char keyPtr[kCCKeySizeAES256+1]; // room for terminator (unused)
    bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)

    // fetch key data
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

    NSUInteger dataLength = [self length];

    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);

    size_t numBytesEncrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                          keyPtr, kCCKeySizeAES256,
                                          NULL /* initialization vector (optional) */,
                                          [self bytes], dataLength, /* input */
                                          buffer, bufferSize, /* output */
                                          &numBytesEncrypted);
    if (cryptStatus == kCCSuccess) {
        //the returned NSData takes ownership of the buffer and will free it on deallocation
        return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
    }

    free(buffer); //free the buffer;
    return nil;
}

Заранее спасибо. Ссылки, учебники, ответы и все остальное приветствуется.

Ответы [ 2 ]

2 голосов
/ 31 июля 2011

Это потому, что NSString фактически не отвечает на это сообщение - ваш код добавляет категорию к NSData!

Помните, что шифрование работает на двоичных данных , поэтому вы должны преобразоватьВаш потенциально Unicode NSString в четко определенную двоичную кодировку (скажем, UTF-8)

Самое быстрое преобразование заключается в использовании метода NSString dataWithEncoding.

0 голосов
/ 31 июля 2011

Ошибка, кажется, в первой строке, она должна сказать

@implementation NSString (AES256)

Затем в вашем методе преобразуйте вашу строку key в NSData, используя метод dataWithEncoding.

...