最近使用MD5的时候发现有时候跟接服务器收方对应不上,经多处寻觅相关问题,终于明确错误原因。
主要问题在于 CC_MD5 函数的时候, 传入的长度参数是NSString 的 length 的话会出错,原因是length方法会转义特殊字符, 传入的并不是字节长度;用C函数 strlen(str)可以避免这个问题。
//解决多字节字符MD5问题
-(NSString *) md5
{
const char *cStr = [self UTF8String];
unsigned char digest[16];
CC_MD5( cStr, (CC_LONG)strlen(cStr), digest );
NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x", digest[i]];
return output;
}
主要来源文档:
http://blog.csdn.net/wint_ing/article/details/51940452