在Cocoa中,如何明确使用UTF-7编码在CC_MD5中使用的字符串?

时间:2011-12-05 06:43:11

标签: cocoa

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有这个功能?目前我的谷歌搜索没有给出好的结果。

由于

1 个答案:

答案 0 :(得分:3)

您链接的帖子绝对不正确。 MD5算法适用于字节块,它不知道这些字节代表什么。

您需要做的就是确保在PHP,C#和Cocoa中以相同的方式编码字符串。只需使用UTF-8。如果这样做,表示字符串的字节的MD5哈希值将相同。

如果您在所有平台上使用UTF-8并且哈希值不同,则可能存在问题,无论是将数据提供给MD5算法还是实现算法本身。 Mac OS X上的CC_MD5功能应该被认为是正确的。