Objective-C расшифровывает шестнадцатеричную строку AES 128 cbc

Я разрабатываю приложение для iPhone на Snow Leopard с Xcode 3.1, которое получает от успокоительного веб-сервиса зашифрованный текст в шестнадцатеричном формате с алгоритмом AES 128-bit (CBC). Алгоритм использует вектор инициализации + секретный ключ. Как мне расшифровать этот текст? Спасибо всем за советы, которые мне удастся дать.

РЕДАКТИРОВАТЬ: Я получаю ответ от REST Server в шестнадцатеричном и зашифрованном формате, я пытаюсь с этим кодом, но я всегда получаю ошибку неправильного параметра. Можете ли вы помочь мне найти ошибку? Возможно ли, чтобы я сначала преобразовал строковый ответ в двоичный формат?

      NSString *response = [request responseString];

      NSData *encryptedData = [response dataUsingEncoding: NSASCIIStringEncoding];
      NSString *key  = @"32charlength";
      NSString *iv   = @"16charlength";  
      NSData *unencryptedData = NULL;
      size_t unencryptedLength = [unencryptedData length];
      CCCryptorStatus ccStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, 0, key, kCCKeySizeAES128, iv, [encryptedData bytes], [encryptedData length], unencryptedData, [encryptedData length], &unencryptedLength);     
      NSString *output = [[NSString alloc] initWithBytes:unencryptedData length:unencryptedLength encoding:NSUTF8StringEncoding];

      if (ccStatus == kCCSuccess) risultato.text = @"SUCCESS";
      else if (ccStatus == kCCParamError) risultato.text =  @"BAD PARAM";
      else if (ccStatus == kCCBufferTooSmall) risultato.text =  @"BUFFER TOO SMALL";
      else if (ccStatus == kCCMemoryFailure) risultato.text =  @"MEMORY FAILURE";
      else if (ccStatus == kCCAlignmentError) risultato.text =  @"ALIGNMENT";
      else if (ccStatus == kCCDecodeError) risultato.text =  @"DECODE ERROR";
      else if (ccStatus == kCCUnimplemented)  risultato.text = @"UNIMPLEMENTED";

EDIT2: эта функция возвращает BAD PARAM, потому что не имеет нужного размера буфера для размещения дешифрованных данных. Я редактирую функцию следующим образом:

      NSData *encryptedData = [response dataUsingEncoding: NSASCIIStringEncoding];
      const void *key  = @"32charlength;
      uint8_t *iv      = @"16charlength";  
      char buffer[4*4096]; 
      memset(buffer, '\0', sizeof(buffer));
              size_t size = sizeof(buffer);
      CCCryptorStatus ccStatus = CCCrypt(kCCDecrypt, 
                                         kCCAlgorithmAES128, 
                                         0, 
                                         key, 
                                         kCCKeySizeAES128, 
                                         iv, 
                                         [encryptedData bytes], 
                                         [encryptedData length], 
                                         buffer, 
                                         sizeof(buffer), 
                                         &size);

Эта функция работает для меня .. большое спасибо.

РЕДАКТИРОВАТЬ 23 МАРТА ------

Теперь система работает с 16-байтовым размером ключа. Теперь у меня есть вопрос, что я могу сделать, чтобы реализовать размер ключа 32 байта? Огромное спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос