본문 바로가기

Computer

iPhone AES256 Encryption & Decryption

아이폰은 개인 휴대용 기기이기 때문에 아이디와 비밀번호를 저장하여 사용합니다.

하지만 그렇다고 해서 비밀번호를 아무런 암호화 처리없이 저장해서는 안되겠죠.

이번에는 NSString 문자열을 NSData 로 Encryption 하고, 또 Decryption하는 코드를 소개하도록 하겠습니다.


Encryption

@implementation NSString (AES256)


- (NSData *)AES256EncryptWithKey:(NSString *)key {

NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding];

char keyPtr[kCCKeySizeAES256+1];

bzero(keyPtr, sizeof(keyPtr));

[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

NSUInteger dataLength = [data length];

size_t bufferSize = dataLength + kCCBlockSizeAES128;

void *buffer = malloc(bufferSize);

size_t numBytesEncrypted = 0;

CCCryptorStatus cryptStatus = 

CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,

keyPtr, kCCKeySizeAES256, NULL, [data bytes], dataLength, buffer, bufferSize, &numBytesEncrypted);


if (cryptStatus == kCCSuccess) {

return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];

}


free(buffer);

return nil;

}

@end


NSString 클래스를 구현하였습니다.
String 문자열에 AES256EncryptWithKey: 와 Key 를 매개변수로 주게되면 Encrypt 된 NSData 형의 값을 리턴하게 됩니다. 

다음은 Encrypt 된 NSData 를 다시 NSString 으로 Decrypt하는 코드입니다.
역시 NSData 를 구현하였습니다.

Decryption

@implementation NSData (AES256)


- (NSString *)AES256DecryptWithKey:(NSString *)key {

char keyPtr[kCCKeySizeAES256+1];

bzero(keyPtr, sizeof(keyPtr));

[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

NSUInteger dataLength = [self length];

size_t bufferSize = dataLength + kCCBlockSizeAES128;

void *buffer = malloc(bufferSize);

size_t numBytesDecrypted = 0;

CCCryptorStatus cryptStatus = 

CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,

  keyPtr, kCCKeySizeAES256, NULL, [self bytes], dataLength,   buffer, bufferSize, &numBytesDecrypted);

if (cryptStatus == kCCSuccess) {

return [[[NSString alloc] initWithData:[NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted] encoding:NSUTF8StringEncoding] autorelease];

}

free(buffer);

return nil;

}



@end


Encryption, Decryption 코드는 검색해보면 많이 있습니다.
위 코드는 구글링 코드를 저 나름대로 쉽게 사용할 수 있도록 간단하게 만든 코드입니다.


 

'Computer' 카테고리의 다른 글

iPhone Mobile Provisioning Profiles  (0) 2010.06.01
iPhone 3G , Wi-Fi 검사하기  (0) 2010.06.01
iPhone http client API (NSURLConnection) - 2  (2) 2010.05.31
iPhone http client API (NSURLConnection) - 1  (0) 2010.05.31
iPhone user Agent  (0) 2010.05.25