Ponieważ nie wysłałeś żadnego kodu, trudno jest dokładnie określić, jakie problemy napotykasz. Jednak wpis na blogu, do którego prowadzi link, wydaje się działać całkiem przyzwoicie ... oprócz dodatkowego przecinka w każdym wywołaniu CCCrypt()
, który powodował błędy kompilacji.
Późniejszy komentarz do tego postu zawiera this adapted code, który działa dla mnie i wydaje się nieco prostszy. Jeśli umieścisz swój kod dla kategorii NSData, możesz napisać coś takiego: (Uwaga: połączenia printf()
służą tylko do demonstracji stanu danych w różnych punktach - w prawdziwej aplikacji nie ma sensu drukowanie takich danych 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, a fakt, że zaszyfrowane dane nie zawsze przekładają się ładnie do NSString, może być bardziej wygodne do pisania dwóch metod, które owinąć funkcjonalność trzeba, 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 na pewno działa na Snow Leopard i @Boz informuje, że CommonCrypto jest częścią Core OS na iPhone. Zarówno 10.4 jak i 10.5 mają /usr/include/CommonCrypto
, chociaż 10.5 ma stronę podręcznika dla CCCryptor.3cc
, a 10.4 nie, więc YMMV.
Edycja: Patrz this follow-up question na użyciu kodowania base64 do reprezentowania zaszyfrowanych bajtów danych w postaci łańcucha (jeśli jest pożądany), przy użyciu bezpiecznych, konwersji bezstratnej.
Należy pamiętać, że dałem bounty do odpowiedzi przez Rob Napier, który dostarczył ** ** bezpieczną wersję odpowiedzi. –