2012-12-28 46 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的输出。

不是说结果会太大的意义,但...

相关问题