2015-01-05 2 views
0

Вы наверняка подумали бы отметить этот вопрос как дубликат. Но, пожалуйста, взгляните на этот вопрос и помогите мне в любом случае вы можете.Я не могу использовать CCHmac в iOS

Я хочу генерировать SHA512 с солью в iOS. Я нашел следующий фрагмент, чтобы достичь этого, но я обнаружил, что CCHmac() функция предназначена для Mac.

-(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; 
} 

Если я использую CC_SHA512() функцию, то, как я буду использовать строку соли? Я отчаянно нуждаюсь в ответе.

Цените свои советы и предложения.

Спасибо !!!

+2

Хеши и HMAC - это не одно и то же? Если вы хотите соленый хэш строки, вы хотите использовать что-то вроде CCKeyDerivationPBKDF. См. [This] (http://security.stackexchange.com/questions/29951/salted-hashes-vs-hmac) для получения дополнительной информации. – Rich

+2

Также 'CCHmac' - это не только OS X (макрос в имени не имеет ничего общего с Mac (OS X)), [этот вопрос] (http://stackoverflow.com/questions/26655999/create- hash-in-swift-using-key-and-message) использует его. – Rich

+1

Старайтесь не указывать строковый аргумент 'data'. – zaph

ответ

3

Пример SHA256 HMAC:

+ (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> уже добавлен в моем коде. Итак, с первого взгляда, я подумал, что нет никакого беспокойства об импорте конкретного файла заголовка. Но вдруг я понимаю, что мне придется импортировать другой заголовочный файл.

Смежные вопросы