繁体   English   中英

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

[英]Can't get MD5 checksum from security framework on Mac OS X Mountain Lion

    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。 任何帮助,将不胜感激。 再次重申一下,到目前为止,所有代码似乎都可以正常工作。 安全框架对我来说还是个新手。

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

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

并不是说结果会很有意义……

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM