이전글 : 2017/09/19 - [Mac/iOS] - iOS에서 RSA암호화(4)
여기까지를 종합하면 iOS에서 RSA암호화를 할 수 있습니다.
앞에서 언급했다시피 Cheon Brave님 블로그를 참고해서 OpenSSL을 프로젝트에 추가하고 구현하였습니다.
// // MLRSAEncryptor.m // OpenSSLTest // // Created by zamcom on 2017. 9. 19.. // Copyright © 2017년 zamcom. All rights reserved. // #import "MLRSAEncryptor.h" #include <openssl/bn.h> #include <openssl/rsa.h> @implementation MLRSAEncryptor - (NSString*)encryption:(NSString*)planText { char modulusArr[] = "79794aae2052a6842a8703445d7be83a6fac2c3a85ed1a9606f930f389c3a6440ad938578132cb407159595f3a6430ceba24f6b74960192d98fa584fc52e9c8fb5f1f609e1a29a872ee52740107fcfe23abcfdfb13ea4e75bbeb27efa24521429e073368c23005053931e8c161166efad15ac68ea0d5a513f063d54877e08941c29e333c4463690caf0b7457c987b649d088cc576c3725eb8ca55971557d7badc2a8cd1944dc5213f190d24a9635ebbe82e5552e27747a22447e6843844a62977ec8967c3745606656a3ff8465a5fc9e4fee82259c6ad7b09e24b62d2cbd1687b6cff69a5d31e13f800a59048bd6a5409907c75d1bf76ac2b1f3144bc5646ffd"; char exponArr[] = "010001";
BIGNUM* modul = BN_new(); BIGNUM* expon = BN_new(); BN_hex2bn(&modul, modulusArr); BN_hex2bn(&expon, exponArr);
RSA* publicKey = RSA_new(); publicKey->n = modul; publicKey->e = expon; int rsaSize = RSA_size(publicKey); unsigned char *crip[rsaSize];
const char *plain = [planText UTF8String];
int encryptedSize = RSA_public_encrypt((int)strlen(plain), (const unsigned char *)plain, (unsigned char *)crip, publicKey, RSA_PKCS1_PADDING); if (encryptedSize <= 0) {
if (publicKey) { publicKey->n = NULL; publicKey->e = NULL; RSA_free(publicKey); }
if (modul) { BN_clear_free(modul); modul = NULL; }
if (expon) { BN_clear_free(expon); expon = NULL; }
return nil; }
if (publicKey) { publicKey->n = NULL; publicKey->e = NULL; RSA_free(publicKey); }
if (modul) { BN_clear_free(modul); modul = NULL; }
if (expon) { BN_clear_free(expon); expon = NULL; }
NSMutableString* result = [NSMutableString string]; for (int i = 0; i < rsaSize; i++) { [result appendFormat:@"%02x", ((unsigned char*)crip)[i]]; } return [NSString stringWithString:result]; } @end |
참고로 publicKey->n과 publicKey->e 를 NULL 값을 넣지않고 RSA_free(publicKey)를 해주면 crash가 발생하니 주의해야 합니다.
Analyze 결과 : 이상 없음
Profile : Memory Leak 체크 : 이상없음
이상으로 iOS에서 RSA 암호화 하는 방법에 대해서 알아보았습니다.
혹시나 도움이 되신 분들은 추천 부탁 드립니다.
'Mac&iOS' 카테고리의 다른 글
iOS Privacy관련 This app has crashed because it attempted to access privacy-sensitive data without a usage description (0) | 2017.10.26 |
---|---|
큰 NSData를 Base64로 인코딩된 스트링으로 만들었는데 서버에서 복호화를 못한다면? (0) | 2017.10.09 |
iOS에서 RSA암호화(4) (0) | 2017.09.19 |
iOS에서 RSA암호화(3) (0) | 2017.09.19 |
iOS에서 RSA암호화(2) (0) | 2017.09.19 |