无法从Mac OS X Mountain Lion上的安全框架获取MD5校验和

时间:2012-12-28 21:11:52

标签: objective-c security frameworks nsdata

    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中得到它。任何帮助,将不胜感激。再说一次,所有的代码似乎都工作正常,直到这一点。安全框架对我来说仍然有点新鲜。

2 个答案:

答案 0 :(得分:1)

实际上,我刚回答了自己的问题。使用SecEncodeTransformCreate(NULL,NULL)并通过它发送数据,我得到了校验和。问题解决了。

答案 1 :(得分:0)

将编码更改为可解码任何字节值的编码。例如NSISOLatin1StringEncoding。这应该为您提供类似于openssl md5 -binary的输出。

虽然结果不是很有意义......