SORU
9 EYLÜL 2009, ÇARŞAMBA


AES iPhone'da bir NSString için Şifreleme

Herkes doğru yönde bana gelin bir dize şifrelemek mümkün, şifrelenmiş veri ile başka bir string dönüyor? (AES256 şifreleme ile çalışıyorum.) Yazmak istiyorum bir yöntemi de iki NSString örnekleri, bir olmak, iletiyi şifrelemek ve başka bir 'şifre' mesaj kutusu ile - sanıyorum ederdim oluşturmak için şifreleme anahtarı ile şifre, bir şekilde bu tersine eğer şifreyi sağlanması ile şifrelenmiş veri. Bu yöntem daha sonra bir NSString şifrelenmiş verilerden oluşturulan dönmelidir.

Tekniği the first comment on this post, ayrıntılı denedim ama şimdiye kadar hiç şansım olmadı. Apple'ın CryptoExercise kesinlikle bir şey vardır, ama ben yapamam anlamda... gördüm çok başvurular için CCCrypt ama başarısız her durumda ben de kullandım.

Ayrıca şifreli bir dize şifresini çözmek için güçlü olmak isterdim, ama bu kCCEncrypt kadar basit/kCCDecrypt umarım.

CEVAP
9 EYLÜL 2009, ÇARŞAMBA


Herhangi bir kod yazmadın beri, zor bir karşılaşma olduğunu bilmek güzel. Ancak, bağlantı blog yazısı oldukça terbiyeli... derleme hataları nedeniyle CCCrypt() her çağrı fazladan virgül dışında iş gibi görünüyor.

Bu yazı üzerine daha sonra bir açıklama benim için çalışıyor this adapted code içerir ve biraz daha basit gibi görünüyor. Eğer dahil kendi kodu için bilimsel deneyler bazen büyük kategorisi, sen-ebilmek yazmak gibi bir şey bu: (NOT: printf() aramalar için gösteren devletin çeşitli veri noktaları — gerçek bir uygulama, bir anlamı olmazdı, baskı gibi değerler.)

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;
}

Verilen bu kod, aslında bu şifreli veri değil, her zaman çevirmek güzel bir NSString olabilir daha rahat yazmak için iki yöntem bu kaydırma işlevselliği gerekir, ileri geri...

- (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];
}

Bu kesinlikle Snow Leopard üzerinde çalışır@BozCommonCrypto raporları iPhone'da Çekirdek işletim sisteminin bir parçasıdır. Hem 10.4 ve 10.5 10.5 CCCryptor.3cc man bir sayfa olmasına rağmen 6**, ve 10.4, YMMV çok değil.

< / ^ hr .

DÜZENLEME:Bir dize (isteğe bağlı) güvenli, kayıpsız dönüşümleri kullanılarak şifrelenmiş veri bayt olarak temsil etmek için Base64 kodlamayı kullanarak this follow-up question bkz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CommonArtisan

    CommonArtisa

    7 Temmuz 2012
  • Elly Awesome

    Elly Awesome

    15 ŞUBAT 2010

İLGİLİ SORU / CEVAPLAR