Iphone的Gravatar?如何生成十六进制MD5哈希?

时间:2009-05-08 15:26:44

标签: iphone objective-c hash md5

我想在我的iPhone应用程序中使用gravatar。无论如何在Objective-C中为iPhone生成十六进制MD5哈希?在iPhone上使用openssl是不行的。

2 个答案:

答案 0 :(得分:5)

在我从应用程序中删除它之前,我就是这样做的:

#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];
}

公平地说,我自己并没有写这篇文章。我发现它在互联网上的某处,但我没有记录在哪里。

答案 1 :(得分:4)

我用于生成必要的MD5哈希的代码在CommonCrypto子文件夹中的my github repository上。那里有许多类似的例程,它们将向您展示如何使用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调用 - 也可以生成十六进制值小写以启动用。