iPad Mini 64位MD5哈希

时间:2014-05-01 18:45:21

标签: ios objective-c

我在堆栈中搜索了MD5方法,似乎大多数重用了我在下面发布的相同代码。该代码适用于iPhone,但是当我在iPad或模拟器上运行时,EXC_BAD_ACCESS (code=1, address=0x0就行了CC_MD5(str, strlen(str), result);这是32位/ 64位问题吗?如果是这样,有人可以解释如何调整此代码以支持两者吗?这两个平台还有什么不同之处?

谢谢

- (NSString *) md5:(NSString *) input
{
    const char* str = [input UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(str, strlen(str), result);

    NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2];
    for(int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) {
        [ret appendFormat:@"%02x",result[i]];
    }
    return ret;
}

我称之为 -

NSString *pass = @"password";
NSString *passHash = [self md5:pass];

1 个答案:

答案 0 :(得分:0)

我正在使用此类NSString,from here

- (NSString *)md5 {
    if (!self) return nil;

    NSString *checksum = [NSString string];
    const char *cStr = [self cStringUsingEncoding:NSUTF8StringEncoding];
    unsigned char buffer[CC_MD5_DIGEST_LENGTH];

    CC_MD5(cStr, (CC_LONG)[self length], buffer);

    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        checksum = [checksum stringByAppendingString:[NSString stringWithFormat:@"%02x", buffer[i]]];
    }

    return checksum;
}