iPhone:ios 4.3上的SHA1哈希

时间:2012-07-10 07:30:27

标签: iphone hash sha1

我在我的应用程序中使用以下函数来处理来自NSString的SHA1哈希:

-(NSString *)stringToSha1:(NSString *)str{
    const char *cstr = [str cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:str.length];

    uint8_t digest[CC_SHA1_DIGEST_LENGTH];

    CC_SHA1(data.bytes, data.length, digest);

    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];

    return output;

}

这就像ios 5.0及以上的iphone设备上的魅力一样,但在我的iPad上运行4.3.5版本却崩溃了

CC_SHA1(data.bytes, data.length, digest);

它说:

  

dyld:懒符号绑定失败:无法解析符号_CC_SHA1    因为无法加载依赖的dylib#3

     

dyld:无法解析符号_CC_SHA1因为无法加载相关的dylib#3

有关如何在iPad 4.3.5设备上运行的任何想法?

2 个答案:

答案 0 :(得分:2)

如果查看头文件,您会看到:

extern unsigned char *CC_SHA1(const void *data, CC_LONG len, unsigned char *md) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_5_0);

__OSX_AVAILABLE_STARTING(...)填充意味着此功能仅适用于OS X 10.4+和iOS 5.0+。这就是您的应用程序崩溃的原因。

答案 1 :(得分:1)

我自己找到了解决方案,但我不知道为什么会有效。

从我的项目中删除了框架“libcommonCrypto.dylib”,清理,构建并运行。

在IOS 4.1和4.3上测试过,就像魅力一样。