2011-08-31 293 views
1

如何從iOS中的'Modulus'和'Exponent'創建RSA加密公鑰? 我從鑰匙串創建了公鑰。是否可以從字符串'Modulus'和'Exponent'的值?RSA加密公鑰?

回答

2

看到這個答案在這裏

https://stackoverflow.com/a/10643894/584616

https://github.com/StCredZero/SCZ-BasicEncodingRules-iOS

SCZ-BasicEncodingRules-IOS

基本編碼規則

實現利用指數,使RSA密鑰導入到iOS 鑰匙串。代碼以ARC爲目標iOS 5。

假設您已經有一個模數和指數,從 一個RSA公共密鑰作爲名爲pubKeyModData和 pubKeyModData的變量中的NSData。然後,下面的代碼將創建一個NSData,其中包含RSA 公鑰,然後您可以將其插入到iOS或OS X鑰匙串中。

NSMutableArray *testArray = [[NSMutableArray alloc] init]; 
[testArray addObject:pubKeyModData]; 
[testArray addObject:pubKeyExpData]; 
NSData *testPubKey = [testArray berData]; 

這將允許你存儲使用addPeerPublicKey的關鍵在於:從SecKeyWrapper在蘋果CryptoExercise實例方法:keyBits。或者,從低級API的角度來看,您可以使用SecItemAdd()。

NSString * peerName = @"Test Public Key"; 

NSData * peerTag = 
    [[NSData alloc] 
     initWithBytes:(const void *)[peerName UTF8String] 
     length:[peerName length]]; 

NSMutableDictionary * peerPublicKeyAttr = [[NSMutableDictionary alloc] init]; 

[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:testPubKey 
    forKey:(__bridge id)kSecValueData]; 
[peerPublicKeyAttr 
    setObject:[NSNumber numberWithBool:YES] 
    forKey:(__bridge id)kSecReturnPersistentRef]; 

sanityCheck = SecItemAdd((__bridge CFDictionaryRef) peerPublicKeyAttr, (CFTypeRef *)&persistPeer); 
+0

什麼是輸入NSData對象pubKeyModData和pubKeyExpData的格式?他們應該是base64 – prodos

+0

編碼格式是NSUTF8StringEncoding – Luke