2011-10-07 49 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