0

以下以 iOS5 作为基类工作得很好,但在 iOS6 上失败(SIGABRT)。它可能是操作系统的东西还是架构的东西?

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

感谢您的任何帮助!

4

2 回答 2

2

您可能在 iOS 5 上“走运”了。SHA-1 摘要是 20 个字节,而不是 16 个:

unsigned char digest[16];
于 2012-09-25T05:59:11.693 回答
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 指针。

于 2012-09-25T06:08:33.760 回答