2012-09-25 34 views
0

不起作用以下工作就好了iOS5的基类,但失败(SIGABRT)与iOS6的。它可能是一个操作系统的东西或架构的东西?工作SHA1代码的iOS5在iOS6的

重要的是还要注意的是伴随MD5哈希不工作。

-(NSString *)SHA1Hash { 
    const char *cStr = [self UTF8String]; 
    unsigned char digest[16]; 
    CC_SHA1(cStr, strlen(cStr), digest); // This is the sha1 call 

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

感谢任何及所有的帮助!

+0

它怎么会失败呢? –

+0

哇,我怎么错过了?上述编辑(SIGABRT) – sbonami

回答

2

你可能都拿到 “幸运” 在iOS 5,SHA-1摘要是20个字节,而不是16:

unsigned char digest[16]; 
+0

我的运气已经用完了的话,不知道该如何管理这么久的工作。你首先正确回答,所以我会奖励你接受,谢谢! – sbonami

2

使用宏CC_SHA1_DIGEST_LENGTH声明你的摘要长度。 16太短,所以你捣毁了堆栈。

unsigned char digest[CC_SHA1_DIGEST_LENGTH]; 

从手册页CC_SHA1

CC_SHA1()计算在数据的len个字节的SHA-1的消息摘要和 其放置在MD(其必须具有用于CC_SHA1_DIGEST_LENGTH == 20空间 字节的输出)。它返回md指针。

+0

你是对的,但迈克第一回答,谢谢你的彻底答案! – sbonami