iOS 5中的工作SHA1代码在iOS 6中不起作用

时间:2012-09-25 05:36:24

标签: objective-c ios6 commoncrypto

以下在iOS5作为基类时运行良好,但在iOS6运行失败(SIGABRT)。它可能是OS的东西还是架构的东西?

重要的是要注意随附的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;
}

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

你可能在iOS 5上获得“幸运”.SHA-1摘要是20个字节,而不是16:

unsigned char digest[16];

答案 1 :(得分: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指针。