Получить контрольную сумму файла md5 / sha1 - PullRequest
4 голосов
/ 04 ноября 2010

Я нашел две функции для подсчета md5 и sha 1 в Objective C. Вот код:

-(void)md5HexDigest:(NSString*)input {
NSData *data = [input dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

uint8_t digest[CC_MD5_DIGEST_LENGTH];

CC_MD5(data.bytes, data.length, digest);

NSMutableString* ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];

for(int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) {
    [ret appendFormat:@"%02x",digest[i]];
}
NSLog (@"%@",ret);
}

-(void) SHA1digest:(NSString*)input{
NSData *data = [input dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, data.length, digest);
NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH *2];

for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
    [output appendFormat:@"%02x", digest[i]];

NSLog (@"%@", output);
}

Я получаю следующие контрольные суммы:

2010-11-04 20:38:01.962 MD5 Counter[88118:a0f] c8142be71e8ed4625c4f27eb573835f5
2010-11-04 20:38:01.964 MD5 Counter[88118:a0f] ba7ff5f68edef52dd89a92c075b88f247f3ef9aa

Однако реальные суммыявляются: SHA1: 1c0d5ea45464e336fcb38c644dc125c3a16b5493

MD5: e8f4d590c8fe62386844d6a2248ae609

Где ошибка?Помогите мне, пожалуйста!

Ответы [ 2 ]

2 голосов
/ 04 ноября 2010

Вы должны использовать CommonCrypto C API.Функции описаны в разделе 3CC справочных страниц .В частности, вам будут интересны семейства функций CC_md5 и CC_sha1 .

0 голосов
/ 04 ноября 2010

Я не уверен, каковы ограничения Mac AppStore, но вы можете вызвать команду md5.Он установлен по умолчанию в OSX и вычисляет контрольную сумму MD5 файла, заданного в качестве аргумента.

...