2011-10-07 76 views
1

我很困惑。我在我的应用程序中使用这种方法,当我传入两个不同的字符串时,它可以返回相同的结果。从生成MD5哈希的方法产生的奇怪行为 - 返回相同的哈希结果

但是,当我将这种方法复制到另一个应用程序,我的结果是正常的 - 我得到两个字符串完全不同的结果。

+(NSString *) returnMD5HashOfString:(NSString*)aString 
{ 
    // Create byte array of unsigned chars 
    unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH]; 

    // Create 16 byte MD5 hash value, store in buffer 
    CC_MD5(aString, aString.length, md5Buffer); 

    // Convert MD5 value in the buffer to NSString of hex values 
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; 
    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) 
     [output appendFormat:@"%02x",md5Buffer[i]]; 

    return output; 
} 

回答

1

CC_MD5不期望一个字符串,它期望一个字符指针。

+0

很好。谢谢,我去了源,我从中得到的方法,并意识到我误解了它的一些部分。这也解释了为什么当我在命令行中散列相同的值时生成的哈希值是不同的。我很想知道为什么该方法返回给我的错误代码相同的'哈希'! – tommi

+0

巧合。 char指针指向内存,并且必须猜测这与字符串的长度相同。内存指向类实例而不是字符串。 – zaph