2009-11-03 4 views

답변

1

SSL을 사용하고 싶지 않으므로 (그렇게하지 않는 데는 많은 이유가 있습니다.) 기본 제공되는 CommonCrypto 프레임 워크를 사용하여 필요한 데이터 만 암호화 할 수 있습니다. 이것은 또한 당신이 원하는하지 않을 수 있습니다 ECB Mode 켜지는지

@implementation NSData (AES256) 

- (NSData*) encryptedWithKey: (NSString *) key; 
{ 
    // 'key' should be 32 bytes for AES256, will be null-padded otherwise 
    char keyBuffer[kCCKeySizeAES128+1]; // room for terminator (unused) 
    bzero(keyBuffer, sizeof(keyBuffer)); // fill with zeroes (for padding) 

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

    // encrypts in-place, since this is a mutable data object 
    size_t numBytesEncrypted = 0; 

    size_t returnLength = ([self length] + kCCKeySizeAES256) & ~(kCCKeySizeAES256 - 1); 

    // NSMutableData* returnBuffer = [NSMutableData dataWithLength:returnLength]; 
    char* returnBuffer = malloc(returnLength * sizeof(uint8_t)); 

    CCCryptorStatus result = CCCrypt(kCCEncrypt, kCCAlgorithmAES128 , kCCOptionPKCS7Padding | kCCOptionECBMode, 
            keyBuffer, kCCKeySizeAES128, nil, 
            [self bytes], [self length], 
            returnBuffer, returnLength, 
            &numBytesEncrypted); 

    if(result == kCCSuccess) 
     return [NSData dataWithBytes:returnBuffer length:numBytesEncrypted]; 
    else 
     return nil; 

} 

@end 

참고 : 여기에 임의의 데이터를 암호화하는 간단한있는 NSData 카테고리입니다. 또한이 호출에서 되돌아 오는 데이터는 기본 64 인코딩해야하는 URL에서 사용하기에 적합하지 않습니다.

+0

EBC가 아닌 CBC 노드를 사용하십시오. 사용자가 입력 한 암호를 사용하지 마십시오. 최소한 HMAC를 통해 암호를 실행하십시오. AES 블록 크기의 배수로 데이터 채우기를 조심하십시오. – zaph

+0

모두 true입니다. 이 코드는 많이 개선 될 수 있습니다. 간단한 API 키 암호화의 경우에는 문제가 없습니다. –

2

SSL은 HTTP 암호화를위한 표준 솔루션이 될 것이다. NSURLConnection은 즉시 (즉, https : // 요청을로드) 상자를 지원하므로 적절하게 서버를 설정해야합니다.

+0

SSL은 좋은 솔루션이지만 Rackspace 클라우드 서버가 있으며 가격은 SSL을 $ 20/월에 높이기 위해 높습니다. 앱에서 사용자 이름과 이메일 주소 만 전송합니다. 그 외 다른 암호화 방법은 표준 SSL입니다 – iosdevnyc

0

SSL이 옵션이 아닌 경우 CBC 모드에서 AES 암호화를 사용하십시오. 128 개의 암호화 비트가 필요한 것 뿐이며 IV는 무엇이든 사용할 수 있습니다 (0은 허용됩니다).

+0

데이터의 보안 요구 사항을 모르는 상태에서 알려진 정적 IV가 적절한 키 길이인지 어떻게 결정할 수 있습니까? 정적 IV를 사용하면 소금이 없기 때문에 몇 가지 유형의 간접 공격을받을 수 있습니다. 랜덤 IV를 생성하고 전송하는 것은 쉬운 일이 아니므로 영향을 이해하지 않고 제거하면 안됩니다. –

관련 문제