2012-12-28 45 views
2
NSString *curFourChanFilePath = [currentSubFile stringByAppendingPathComponent:curFourChanFile]; 

    NSData *imageData = [NSData dataWithContentsOfFile:curFourChanFilePath]; 

    CFErrorRef theError; 

    SecTransformRef testTransform = SecDigestTransformCreate(kSecDigestMD5,0,&theError); 

    CFDataRef theDataRef = (__bridge CFDataRef)imageData; 

    SecTransformSetAttribute(testTransform, kSecTransformInputAttributeName, theDataRef, &theError); 

    NSData *resultingData = (__bridge NSData *)(SecTransformExecute(testTransform, &theError)); 

    NSString *resultingString = [[NSString alloc] initWithData:resultingData encoding:NSUTF8StringEncoding]; 

    NSLog(@"%@",resultingString); 

    [checksumMapTable setObject:resultingData forKey:curFourChanFile]; 

下面是我遇到的問題的代碼。這段代碼是嵌套的嵌套循環,並且所有代碼都能正常工作,直到將數據轉換爲NSString。 UTF8似乎有問題。所有的字符串變成(null),但奇怪的是,它不是(null)。當我將編碼更改爲UTF16或UTF32時,我得到文本。不可讀的文本,如你所期望的那樣,使用錯誤的編碼都是亂碼,但很明顯,我似乎無法用我認爲是正確的編碼UTF8來解決它。任何幫助,將不勝感激。再次重申,所有的代碼在這一點上似乎都能正常工作。安全框架對我來說還是一個新點子。無法從Mac OS X上的安全框架獲取MD5校驗和Mountain Lion

+0

你想用這個字符串做什麼? MD5的結果是字節,而不是字符。這意味着你必須更加精確地考慮如何將這些字節轉換爲字符。 – kmkaplan

+0

嗯,我試着按照Apple文檔中的例子。我正在嘗試獲取MD5校驗碼。我必須錯過一步。就像我說過的,我對安全框架和手動校驗總體來說是全新的。我的意思是由OpenSSL的MD5散列等東西輸出的密鑰。 –

+0

OpenSSL可以輸出原始字節(默認),十六進制數字(-hex)或Base64編碼(-base64)數據。你想要什麼? – kmkaplan

回答

1

其實,我只是回答了我的問題。使用SecEncodeTransformCreate(NULL,NULL)並通過它發送數據,我得到了校驗和。問題解決了。

0

將您的編碼更改爲可以解碼任何字節值的編碼。例如NSISOLatin1StringEncoding。這應該會給你一個類似於openssl md5 -binary的輸出。

不是說結果會太大的意義,但...

相關問題