2016-06-16 13 views
0

私は秘密のPKCS#12キーを生成し、それをPEMフォーマットにしてiPhoneアプリに送りました。私はこの秘密鍵をiPhone Keychainに保存したいと思います。SecItemAddを使用してRSA秘密鍵をiPhoneキーチェーンに入れます

まず、「BEGIN RSA PRIVATE KEY」のようなヘッダを削除しました。その後、残りの部分をNSDataに変換しました。そこで、このようなコードを使用して:

CFDictionaryRef issues in Swift

が、私はこの秘密鍵からSecKeyRefを取得することができました。

ここでSecItemAddを使用してこのSecKeyRefをキーチェーンに挿入する方法を知りたいですか?

+0

は、uは任意のライブラリを使用しようとしたがありますか? –

+0

いいえ、どのライブラリをお勧めしますか? – hockeybro

+0

like - https://github.com/kishikawakatsumi/KeychainAccessまたはhttps://github.com/soffes/SSKeychain –

答えて

0

SecKeyRef

NSDataから
- (NSData *)getPublicKeyBitsFromKey:(SecKeyRef)givenKey { 

    static const uint8_t publicKeyIdentifier[] = "com.your.company.publickey"; 
    NSData *publicTag = [[NSData alloc] initWithBytes:publicKeyIdentifier length:sizeof(publicKeyIdentifier)]; 

    OSStatus sanityCheck = noErr; 
    NSData * publicKeyBits = nil; 

    NSMutableDictionary * queryPublicKey = [[NSMutableDictionary alloc] init]; 
    [queryPublicKey setObject:(__bridge id)kSecClassKey forKey:(__bridge id)kSecClass]; 
    [queryPublicKey setObject:publicTag forKey:(__bridge id)kSecAttrApplicationTag]; 
    [queryPublicKey setObject:(__bridge id)kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType]; 

    // Temporarily add key to the Keychain, return as data: 
    NSMutableDictionary * attributes = [queryPublicKey mutableCopy]; 
    [attributes setObject:(__bridge id)givenKey forKey:(__bridge id)kSecValueRef]; 
    [attributes setObject:@YES forKey:(__bridge id)kSecReturnData]; 
    CFTypeRef result; 
    sanityCheck = SecItemAdd((__bridge CFDictionaryRef) attributes, &result); 
    if (sanityCheck == errSecSuccess) { 
     publicKeyBits = CFBridgingRelease(result); 

     // Remove from Keychain again: 
     (void)SecItemDelete((__bridge CFDictionaryRef) queryPublicKey); 
    } 

    return publicKeyBits; 
} 

を変換し、キーチェーンに追加し、このメソッドを使用してみてください。
これがあなたの問題を解決することを願っています。

関連する問題