Hello dearest community,
我遇到了创建字符串的精确MD5的问题。它必须与PHP和C#对应的MD5匹配。读这个:PHP MD5 not the same as .NET MD5,我想我必须首先使用UTF-7编码转换字符串。但目前我只知道NSString只支持UTF-8。这是我从字符串创建MD5的代码:
-(NSString *) md5:(NSString *) str
{
const char *cStr = [str UTF8String];
unsigned char result[16];
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]
];
}
所以,如果我没有弄错,在阅读[str UTF8String]
的行中,我必须将其改为阅读[str UTF7String]
的内容。我对么?如果它是Cocoa有这个功能?目前我的谷歌搜索没有给出好的结果。
由于
答案 0 :(得分:3)
您链接的帖子绝对不正确。 MD5算法适用于字节块,它不知道这些字节代表什么。
您需要做的就是确保在PHP,C#和Cocoa中以相同的方式编码字符串。只需使用UTF-8。如果这样做,表示字符串的字节的MD5哈希值将相同。
如果您在所有平台上使用UTF-8并且哈希值不同,则可能存在问题,无论是将数据提供给MD5算法还是实现算法本身。 Mac OS X上的CC_MD5
功能应该被认为是正确的。