2012-07-10 66 views
1

我用下面的函數SHA1哈希從NSString的在我的應用SHA1哈希:iPhone:在iOS 4.3

-(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; 

} 

這就像一個魅力在我的iPhone設備的iOS 5.0及以上,但我的iPad上運行的版本4.3.5崩潰就行

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

它說以下內容:

使dyld:延遲符號綁定失敗:無法解析SY MBOL _CC_SHA1在 因爲依賴dylib#3無法加載

使dyld:不能解析符號_CC_SHA1,因爲依賴dylib#3無法加載

如何使它工作的任何想法我的iPad 4.3.5設備?

回答

1

自己找到了解決方案,但我不知道爲什麼它的工作原理。

從我的項目中刪除了框架「libcommonCrypto.dylib」,乾淨,構建和它的工作。

測試IOS 4.1和4.3,就像一個魅力。

+1

如果這可以作爲一種解決方案,那麼請繼續並將其標記爲答案,即使它是您自己的答案。 – TheZ 2012-07-16 23:45:59

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+可用。這就是您的應用程序崩潰的原因。

+0

是的,我見過。另一方面,他們說它應該適用於4.3版本的一些地方,所以這很奇怪:\請參閱以下幾個示例之一:http://stackoverflow.com/questions/7971827/are-cc-md5-and -cc-sha1-available-in-ios-4 – Madoc 2012-07-10 07:56:05