Граватар для айфона? Как сгенерировать шестнадцатеричный хеш MD5? - PullRequest
1 голос
/ 08 мая 2009

Я бы хотел использовать gravatar в своем приложении для iPhone. Есть ли способ сгенерировать шестнадцатеричный хеш MD5 в Objective-C для iPhone? Использование openssl на iPhone не допускается.

Ответы [ 2 ]

5 голосов
/ 08 мая 2009

Вот как я это сделал, прежде чем удалить из приложения:

#import <CommonCrypto/CommonDigest.h>

NSString* md5( NSString *str ) {
  const char *cStr = [str UTF8String];
  unsigned char result[CC_MD5_DIGEST_LENGTH];

  CC_MD5( cStr, strlen(cStr), result );

  return [[NSString
      stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
      result[0], result[1],
      result[2], result[3],
      result[4], result[5],
      result[6], result[7],
      result[8], result[9],
      result[10], result[11],
      result[12], result[13],
      result[14], result[15]
      ] lowercaseString];
}

Справедливо добавить, что я сам не написал это. Я нашел это где-то в Интернете, но я не записал где.

4 голосов
/ 09 мая 2009

Код, который я использовал для генерации необходимого MD5-хэша, находится на моего репозитория github в подпапке CommonCrypto. Там есть множество похожих подпрограмм, которые либо покажут вам, как использовать CommonCrypto, либо как форматировать строки шестнадцатеричных байтовых значений, base-64 и т. Д.

Потенциально лучший способ создания строки:

NSMutableString * str = [[NSMutableString alloc] initWithCapacity: 33];
int i;
for ( i = 0; i < 16; i++ )
{
  [str appendFormat: @"%02x", result[i]];
}
NSString * output = [str copy];
[str release];
return ( [output autorelease] );

Однако, если вы собираетесь использовать код в ответе выше, я бы лично предложил изменить% 02X на% 02x и полностью отказаться от вызова -lowercaseString - может также сгенерировать шестнадцатеричные значения в нижнем регистре для начала с.

...