2010-02-24 6 views
3

저는 iPhone에서 Cbjective-C를 사용하여 간단한 RSA 암호화를 수행하는 방법에 대한 Google의 조사와 답을 제공해 왔습니다. 내가 가진 주요 문제는 NSData 개체로 지수 및 모듈러스가 제공되었으며이를 RSA 암호화를 수행하기 위해 SecKeyRef 개체로 변환해야합니다.iPhone/Objective-c RSA 암호화

누구든지 그 방법을 알고 있거나 유용한 힌트가 있습니까?

감사합니다.

답변

2

내 프로젝트에서 OpenSSL 사용이 끝났습니다. 키를 가져오고 아이폰 대신 해당 라이브러리를 사용하여 암호화하십시오.

0

이 솔루션을 구현하여 GitHub에 저장했습니다. 이제 OpenSSL 대신 키 체인에 Apple에서 허가 한 API를 사용할 수 있습니다. (그들은 불행하게도, 그들의 문헌에 OpenSSL을 낙담.)

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

SCZ-BasicEncodingRules - 아이폰 OS

기본 인코딩 규칙의

구현 지수를 사용하여 아이폰 OS 키 체인에 RSA 키 가져 오기를 활성화합니다. 코드는 ARC가 적용된 iOS 5를 대상으로합니다.

의 계수와 지수를 이미 pubKeyModData 및 pubKeyModData 변수에 NSData로 RSA 공개 키가 있다고 가정 해 보겠습니다. 다음 코드는 RSA 공개 키를 포함하는 NSData를 생성 한 다음 iOS 또는 OS X 키 체인에 삽입 할 수 있습니다. keyBits : : 방법 SecKeyWrapper에서 애플 CryptoExercise 예에서

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

이것은 당신이 addPeerPublicKey를 사용하여 키를 저장할 수있다. 또는 저수준 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);