Открытый ключ шифрования RSA? - PullRequest
1 голос
/ 31 августа 2011

Как я могу создать открытый ключ шифрования RSA из 'Modulus' и 'Exponent' в iOS.?Я создал открытый ключ из цепочки для ключей.возможно ли это из значений строк 'Modulus' и 'Exponent'?

1 Ответ

2 голосов
/ 18 мая 2012

См. Этот ответ здесь

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

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

SCZ-BasicEncodingRules-iOS

Реализация основных правил кодирования для включенияимпорт ключей RSA в iOS KeyChain с использованием экспоненты.Код ориентирован на iOS 5 с ARC.

Допустим, у вас уже есть модуль и экспонента из открытого ключа RSA в виде NSData в переменных с именами pubKeyModData и pubKeyModData.Затем следующий код создаст NSData, содержащий этот открытый ключ RSA, который затем можно вставить в связку ключей iOS или OS X.

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

Это позволит вам сохранить ключ, используя addPeerPublicKey: keyBits:метод из SecKeyWrapper в примере Apple CryptoExercise.Или, с точки зрения низкоуровневого 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);
...