سؤال

يناقش هذا السؤال تشفير البيانات على اي فون استخدام الدالة () سرداب. وكبديل لذلك، هناك المفاتيح على اي فون وإذا كان الأمر كذلك، ما كود أود أن تستخدمه للدخول إليه من أجل تخزين تفاصيل تسجيل الدخول ثم استردادها بالنسبة لنا في تطبيق؟

هل كانت مفيدة؟

المحلول

وهناك المفاتيح التي يمكنك استخدامها - لرمز، وأفضل رهان هو للتحقق من تطبيق نموذج GenericKeychain من أبل:

GenericKeychain نموذجا

نصائح أخرى

وشيء آخر أن نلاحظ: واجهات برمجة التطبيقات المفاتيح لا تعمل في محاكاة عند استخدام الإصدارات القديمة (الإصدار 2.x، 3.X) من SDK فون. هذا يمكن أن يوفر لك الكثير من الإحباط عند اختبار!

وأنا حقا مثل الطنين أندرسون سلسلة المفاتيح طبقة تجريد وأنا ننتظر بفارغ الصبر <ل أ href = "http://mooseyard.com/projects/MYCrypto/" يختلط = "noreferrer"> MYCrypto ينس Alfke في للوصول إلى حالة قابلة للاستخدام. وهذا الأخير يقوم بعمل المختصة السماح للاستخدام على نظام التشغيل Mac OS X و iPhone باستخدام نفس رمز، على الرغم من معالمه تحاكي فقط مجموعة فرعية صغيرة من ال المفاتيح.

وهنا هو ما يمكنني استخدام لتخزين الرئيسية زوجا / القيمة في سلسلة المفاتيح. تأكد من إضافة Security.framework لمشروعك

#import <Security/Security.h>

// -------------------------------------------------------------------------
-(NSString *)getSecureValueForKey:(NSString *)key {
    /*

     Return a value from the keychain

     */

    // Retrieve a value from the keychain
    NSDictionary *result;
    NSArray *keys = [[[NSArray alloc] initWithObjects: (NSString *) kSecClass, kSecAttrAccount, kSecReturnAttributes, nil] autorelease];
    NSArray *objects = [[[NSArray alloc] initWithObjects: (NSString *) kSecClassGenericPassword, key, kCFBooleanTrue, nil] autorelease];
    NSDictionary *query = [[NSDictionary alloc] initWithObjects: objects forKeys: keys];

    // Check if the value was found
    OSStatus status = SecItemCopyMatching((CFDictionaryRef) query, (CFTypeRef *) &result);
    [query release];
    if (status != noErr) {
        // Value not found
        return nil;
    } else {
        // Value was found so return it
        NSString *value = (NSString *) [result objectForKey: (NSString *) kSecAttrGeneric];
        return value;
    }
}




// -------------------------------------------------------------------------
-(bool)storeSecureValue:(NSString *)value forKey:(NSString *)key {
    /*

     Store a value in the keychain

     */

    // Get the existing value for the key
    NSString *existingValue = [self getSecureValueForKey:key];

    // Check if a value already exists for this key
    OSStatus status;
    if (existingValue) {
        // Value already exists, so update it
        NSArray *keys = [[[NSArray alloc] initWithObjects: (NSString *) kSecClass, kSecAttrAccount, nil] autorelease];
        NSArray *objects = [[[NSArray alloc] initWithObjects: (NSString *) kSecClassGenericPassword, key, nil] autorelease];
        NSDictionary *query = [[[NSDictionary alloc] initWithObjects: objects forKeys: keys] autorelease];
        status = SecItemUpdate((CFDictionaryRef) query, (CFDictionaryRef) [NSDictionary dictionaryWithObject:value forKey: (NSString *) kSecAttrGeneric]);
    } else {
        // Value does not exist, so add it
        NSArray *keys = [[[NSArray alloc] initWithObjects: (NSString *) kSecClass, kSecAttrAccount, kSecAttrGeneric, nil] autorelease];
        NSArray *objects = [[[NSArray alloc] initWithObjects: (NSString *) kSecClassGenericPassword, key, value, nil] autorelease];
        NSDictionary *query = [[[NSDictionary alloc] initWithObjects: objects forKeys: keys] autorelease];
        status = SecItemAdd((CFDictionaryRef) query, NULL);
    }

    // Check if the value was stored
    if (status != noErr) {
        // Value was not stored
        return false;
    } else {
        // Value was stored
        return true;
    }
}

والجدير بالذكر أن هذه القيم الرئيسية / لن تحصل على حذف إذا كان المستخدم بحذف التطبيق الخاص بك. إذا كان المستخدم بحذف التطبيق الخاص بك، ثم يعيد تثبيت ذلك، فإن المفتاح / القيم ستظل الوصول إليها.

وتذكر أيضا أنه عندما توليد معرف التطبيق، إذا كنت تريد أكثر من تطبيق واحد للوصول إلى نفس المعلومات المفاتيح، لديك لتوليد بطاقة البرية معرف التطبيق (##### com.prefix. *) ...

ومع أحدث الإصدار 1.2 من عينة GenericKeychain التفاح يوفر المجمع المفاتيح التي تدير أيضا على محاكي فون. إطلاعك في هذه المقالة للحصول على تفاصيل: <لأ href = "http://dev-metal.blogspot.com/2010/08/howto-use-keychain-in-iphone-sdk-to.html" يختلط = "نوفولو noreferrer "> http://dev-metal.blogspot.com/2010/08/howto-use-keychain-in-iphone-sdk-to.html

وهنا هو واحد أكثر جيدة فئة مجمع من Mr.Granoff https://github.com/granoff/Lockbox بفضل

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top