2015-01-05 3 views
0

이 질문을 반드시 중복으로 표시하는 것이 좋습니다. 그러나,이 질문을보고 어쨌든 당신이 할 수있는 나를 도우십시오.iOS에서 CCHmac을 사용할 수 없습니다.

iOS에서 소금으로 SHA512를 생성하고 싶습니다. 이 기사를 읽으려면 다음 스 니펫을 발견했으나 발견했습니다. CCHmac() 함수는 Mac 용입니다. 내가 CC_SHA512() 기능을 사용하는 경우

-(NSString *)hashString:(NSString *)data withSalt:(NSString *)salt 
{ 
    const char *cKey = [salt cStringUsingEncoding:NSUTF8StringEncoding]; 
    const char *cData = [data cStringUsingEncoding:NSUTF8StringEncoding]; 
    unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH]; 
    CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC); 

    NSString *hash; 
    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2]; 

    for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) 
     [output appendFormat:@"%02x", cHMAC[i]]; 
    hash = output; 
    return hash; 
} 

, 그럼 어떻게 소금 문자열을 사용할 것인가? 나는 그 대답에 절망적이다.

귀하의 조언과 제안에 감사드립니다.

감사합니다 !!! SHA256 HMAC의

+2

해시 및 HMAC는 동일한 것이 아닙니다. 문자열의 해시 된 해쉬를 원한다면 'CCKeyDerivationPBKDF'와 같은 것을 사용하고 싶습니다. 자세한 내용은 [this] (http://security.stackexchange.com/questions/29951/salted-hashes-vs-hmac)를 참조하십시오. – Rich

+2

또한'CCHmac'은 OS X에서만 사용되는 것이 아닙니다 (Mac의 이름은 Mac (OS X) 만 해당됩니다), [이 질문] (http://stackoverflow.com/questions/26655999/create- 해시 - 인 - 키 - 앤 - 메시지)는 그것을 사용합니다. – Rich

+1

문자열 인수'data'의 이름을 지정하지 마십시오. – zaph

답변

3

예 :

+ (NSData *)doHmac:(NSData *)dataIn key:(NSData *)salt 
{ 
    NSMutableData *macOut = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH]; 
    CCHmac(kCCHmacAlgSHA256, 
      salt.bytes, salt.length, 
      dataIn.bytes, dataIn.length, 
      macOut.mutableBytes); 

    return macOut; 
} 
6

나는 다음 줄을 잃어버린 : 사실

#import <CommonCrypto/CommonHMAC.h> 

, < CommonCrypto/CommonCryptor.h> 이미 내 코드에서 추가되었다. 그래서, 처음에는 특정 헤더 파일을 가져 오는 것에 대해 걱정할 필요가 없다고 생각했습니다. 그러나 갑자기 다른 헤더 파일을 가져와야한다는 것을 알게되었습니다.