2012-03-29 92 views
5

我有一個項目,我從服務器接收用戶的加密RSA私鑰。使用用戶提供的信息,我能夠將數據解密成預期的格式。但是,我無法弄清楚如何將私鑰加載到iOS密鑰鏈中以便在RSA加密函數中使用。iOS:將私鑰添加到設備KeyChain

目前,我有以下代碼,我已經從各種示例拼湊在一起。此代碼適用於添加公鑰,但似乎根本無法添加私鑰。

[peerPublicKeyAttr setObject:(__bridge id)kSecClassKey forKey:(__bridge id)kSecClass]; 
[peerPublicKeyAttr setObject:(__bridge id)kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType]; 
[peerPublicKeyAttr setObject:peerTag forKey:(__bridge id)kSecAttrApplicationTag]; 
[peerPublicKeyAttr setObject:privateKeyData forKey:(__bridge id)kSecValueData]; 
[peerPublicKeyAttr setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnRef]; 

sanityCheck = SecItemDelete((__bridge CFDictionaryRef) peerPublicKeyAttr) ; 

sanityCheck = SecItemAdd((__bridge CFDictionaryRef) peerPublicKeyAttr, (CFTypeRef *)&privateKey); 

當運行此代碼與私有密鑰數據(解碼成DER格式),privateKey變量由SecItemAdd()呼叫設置爲NULL。但是,sanityCheck變量指示「無錯誤」。我不知道我錯過了什麼。

我需要做什麼才能讓私鑰成功加載到鑰匙串中?

+0

[在iOS上使用RSA公鑰](http://stackoverflow.com/questions/9728799/using-an-rsa-public-key-on-ios) – bobobobo 2013-04-19 02:00:14

回答

2

在這個確切的主題Official response from Apple是,這是不支持的。獲得私鑰進入密鑰鏈唯一受支持的方式是通過PKCS#12文件。

+0

但是那麼你如何訪問私人密鑰導入後? – 2015-02-17 20:03:44

+0

導入P12文件後,您可以使用SecItemCopyMatching()函數訪問私鑰。 – 2015-02-17 22:35:55

+0

此答案中的鏈接不起作用。它重定向到https://developer.apple.com/account。 – 2017-05-24 12:16:15

0