Поскольку Konrad сказал, что компилятор может создать Таблицу переходов.
В C++ причина это банка из-за ограничения переключателей.
Поскольку вы не опубликовали никакого кода, трудно точно определить, с какими проблемами вы столкнулись. Однако сообщение в блоге, на которое вы ссылаетесь, похоже, работает довольно прилично ... за исключением дополнительной запятой в каждом вызове CCCrypt ()
, который вызывал ошибки компиляции.
Более поздний комментарий к этому сообщению включает это адаптированный код , который работает для меня и кажется немного более простым. Если вы включите их код для категории NSData, вы можете написать что-то вроде этого: (Примечание: вызовы printf ()
предназначены только для демонстрации состояния данных в различных точках - в реальном приложении это не имеет смысла печатать такие значения.)
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *key = @"my password";
NSString *secret = @"text to encrypt";
NSData *plain = [secret dataUsingEncoding:NSUTF8StringEncoding];
NSData *cipher = [plain AES256EncryptWithKey:key];
printf("%s\n", [[cipher description] UTF8String]);
plain = [cipher AES256DecryptWithKey:key];
printf("%s\n", [[plain description] UTF8String]);
printf("%s\n", [[[NSString alloc] initWithData:plain encoding:NSUTF8StringEncoding] UTF8String]);
[pool drain];
return 0;
}
Учитывая этот код и тот факт, что зашифрованные данные не всегда хорошо переводятся в NSString, может быть удобнее написать два метода, которые обертывают нужную вам функциональность, в прямом и обратном направлениях ...
- (NSData*) encryptString:(NSString*)plaintext withKey:(NSString*)key {
return [[plaintext dataUsingEncoding:NSUTF8StringEncoding] AES256EncryptWithKey:key];
}
- (NSString*) decryptData:(NSData*)ciphertext withKey:(NSString*)key {
return [[[NSString alloc] initWithData:[ciphertext AES256DecryptWithKey:key]
encoding:NSUTF8StringEncoding] autorelease];
}
Это определенно работает на Snow Leopard, а @Boz сообщает, что CommonCrypto является частью ядра ОС на iPhone. И 10.4, и 10.5 имеют / usr / include / CommonCrypto
, хотя в 10.5 есть справочная страница для CCCryptor.3cc
, а в 10.4 нет, поэтому YMMV.
РЕДАКТИРОВАТЬ: ] См. следующий вопрос об использовании кодировки Base64 для представления байтов зашифрованных данных в виде строки (при желании) с использованием безопасных преобразований без потерь.