我想在我的 iPhone 应用程序中使用gravatar 。无论如何在 iPhone 的 Objective-C 中生成十六进制 MD5 哈希?在 iPhone 上使用 openssl 是不行的。
问问题
2288 次
2 回答
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];
}
公平地说,我不是自己写的。我在互联网的某个地方找到了它,但我没有记录在哪里。
于 2009-05-08T15:35:28.317 回答
4
我用于生成必要 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 调用 - 还不如生成小写的十六进制值开始。
于 2009-05-08T23:59:25.187 回答