Ios iPad Mini 64位MD5哈希

Ios iPad Mini 64位MD5哈希,ios,objective-c,Ios,Objective C,我在堆栈中搜索了MD5方法,似乎大多数方法都重复使用了我在下面发布的相同代码。该代码适用于iPhone,但当我在iPad或模拟器上运行时,我会在CC\u MD5(str,strlen(str),result)行上获得EXC\u BAD\u访问(code=1,address=0x0)这是一个32位/64位的问题吗?如果是,有人能解释一下如何调整此代码以支持这两个平台吗?这两个平台之间还有什么不同之处 多谢各位 - (NSString *) md5:(NSString *) input {

我在堆栈中搜索了MD5方法,似乎大多数方法都重复使用了我在下面发布的相同代码。该代码适用于iPhone,但当我在iPad或模拟器上运行时,我会在
CC\u MD5(str,strlen(str),result)行上获得
EXC\u BAD\u访问(code=1,address=0x0
)
这是一个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

-(NSString*)md5{
如果(!self)返回nil;
NSString*校验和=[NSString];
const char*cStr=[self-cStringUsingEncoding:NSUTF8StringEncoding];
无符号字符缓冲区[CC_MD5_DIGEST_LENGTH];
CC_MD5(cStr,(CC_LONG)[自身长度],缓冲区);
for(int i=0;i
我无法在32位或64位iOS模拟器中重现您的问题。-(您应该添加强制转换:
CC_MD5(str,(CC_LONG)strlen(str),result);
以避免在64位模式下出现编译器警告,但这并不能解释崩溃。)添加了
CC\u LONG
,但你是对的。仍然没有修复它。该方法直接放在视图的.m文件上,在我的
@synthesis
行下。这有可能是在它自己的类中吗?EXC\u BAD\u ACCESS(code=1,address=0x0表示输入字符串为null,这没有意义,因为您是用常量字符串调用它的。您是否在文件中包含了#import?@ahwulf:这也是我的第一个想法,但如果没有该导入文件,编译器将不知道CC#u MD5#u DIGEST#的长度。仅为了GRIN,您可以调用NSLog(@“%s”,str)就在CC_MD5呼叫之前。这会崩溃吗?
NSString *pass = @"password";
NSString *passHash = [self md5:pass];
- (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;
}