大家好,最亲爱的社区:
我遇到了创建字符串的精确MD5的问题。它必须与PHP和C#中的MD5匹配。读到这个:PHP MD5 not the same as .NET MD5,我想我必须首先使用UTF7编码来转换字符串。但目前我只知道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会有这个功能吗?目前我的谷歌搜索并没有给出好的结果。
谢谢
发布于 2011-12-05 15:22:37
你链接的帖子是绝对不正确的。MD5算法在字节块上工作,它不知道这些字节代表什么。
您所要做的就是确保字符串在PHP、C#和Cocoa中以相同的方式编码。只需使用UTF-8即可。如果这样做,表示字符串的字节的MD5散列将是相同的。
如果您在所有平台上都使用UTF8,并且散列是不同的,那么可能存在将数据提供给MD5算法的方式或算法本身的实现方面的问题。Mac上的CC_MD5函数应该被认为是正确的。
https://stackoverflow.com/questions/8381836
复制相似问题