본문 바로가기
프로그래밍/Xcode-iOS

[iOS] Hex String to NSData

by Mr-후 2017. 4. 24.
반응형

금융권 프로젝트를 하다 보면 보안키패드 적용은 거의 필수적이다. 

 

보안 키패드의 경우는 서버와 클라이언트가 서로 싱크가 맞아야 복호화가 가능하기 때문에 

서버 세션에서 Security Key를 만들어 관리를 하게 된다. 

 

따라서 클라이언트는 동일 세션으로 서버와 통신을 지속해야하고(별도 HTTP세션을 만들어서 하면 안됨) 세션이 바껴서 키패드 Security Key가 변경되지 않도록 하는 것도 중요하다. 

 

서버에서 생성된 보안키를 API를 통해 얻어 올 수 있는데 그 값이 Hex형태로 내려온다. 

따라서 Hex를 String으로 변환하는 과정이 필요하다

 

NSData 카테고리를 별도로 만들어 사용하면 된다. 

 

<NSData+HexString.h> 파일 전체 

 

#import <Foundation/Foundation.h>

 

@interface NSData (HexString)

+(id)dataWithHexString:(NSString *)hex;

 

@end

 

<NSData+HexString.m

 

#import "NSData+HexString.h"

 

@implementation NSData (HexString)

 

// Not efficent

+(id)dataWithHexString:(NSString *)hex

{

    char buf[3];

    buf[2] = '\0';

    NSAssert(0 == [hex length] % 2, @"Hex strings should have an even number of digits (%@)", hex);

    unsigned char *bytes = malloc([hex length]/2);

    unsigned char *bp = bytes;

    for (CFIndex i = 0; i < [hex length]; i += 2) {

        buf[0] = [hex characterAtIndex:i];

        buf[1] = [hex characterAtIndex:i+1];

        char *b2 = NULL;

        *bp++ = strtol(buf, &b2, 16);

        NSAssert(b2 == buf + 2, @"String should be all hex digits: %@ (bad digit around %ld)", hex, i);

    }

    

    return [NSData dataWithBytesNoCopy:bytes length:[hex length]/2 freeWhenDone:YES];

}

 

 

@end

 

 

서버로부터 수신한 Hex값을 NSData형식의 String으로 값을 변경하여 보안 키패드의 초기화시 사용한다.  

사용 예시시는 다음과 같다. 

 

 

[NSData dataWithHexString:mtkSkey]  // mtkSkey는  Hex 

 

 

반응형