шифрование iPhone / Objective-c RSA - PullRequest
       17

шифрование iPhone / Objective-c RSA

3 голосов
/ 24 февраля 2010

Я искал в Google информацию о том, как сделать простое шифрование RSA с помощью Cbjective-C на iPhone. Основная проблема, с которой я столкнулся, заключается в том, что мне были предоставлены Экспонент и Модуль в качестве объекта NSData, и мне нужно затем преобразовать их в объект SecKeyRef для выполнения шифрования RSA.

Кто-нибудь знает, как это сделать, или есть полезные советы?

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 27 марта 2010

В итоге я использовал OpenSSL в своем проекте. и импортируйте ключи и зашифруйте, используя эту библиотеку вместо iPhone.

0 голосов
/ 17 мая 2012

Я реализовал решение для этого и поместил его на GitHub. Теперь вы можете использовать санкционированные Apple API-интерфейсы для связки ключей вместо OpenSSL. (К сожалению, они не одобряют OpenSSL в своей литературе.)

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

ЗКН-BasicEncodingRules КСН

Реализация базовых правил кодирования для включения импорта ключей 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);
...