Ponieważ nie opublikowałeś żadnego kodu, trudno jest dokładnie określić, jakie problemy napotykasz. Jednak post na blogu, do którego prowadzi łącze, wydaje się działać całkiem przyzwoicie ... poza dodatkowym przecinkiem w każdym wywołaniu, CCCrypt()
który powodował błędy kompilacji.
Późniejszy komentarz do tego posta zawiera dostosowany kod , który działa dla mnie i wydaje się nieco prostszy. Jeśli dołączysz ich kod dla kategorii NSData, możesz napisać coś takiego: (Uwaga: printf()
wywołania służą tylko do zademonstrowania stanu danych w różnych punktach - w prawdziwej aplikacji nie ma sensu drukować takich wartości .)
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;
}
Biorąc pod uwagę ten kod i fakt, że zaszyfrowane dane nie zawsze będą ładnie przekładać się na NSString, wygodniejsze może być napisanie dwóch metod, które zawijają potrzebną funkcjonalność, do przodu i do tyłu ...
- (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];
}
To zdecydowanie działa w systemie Snow Leopard, a @Boz informuje, że CommonCrypto jest częścią Core OS na iPhonie. Zarówno 10.4, jak i 10.5 mają /usr/include/CommonCrypto
, chociaż 10.5 ma stronę CCCryptor.3cc
podręcznika dla, a 10.4 nie, więc YMMV.
EDYCJA: Zobacz to pytanie uzupełniające dotyczące używania kodowania Base64 do reprezentowania zaszyfrowanych bajtów danych jako ciągu (w razie potrzeby) przy użyciu bezpiecznych, bezstratnych konwersji.