我在堆栈中搜索了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];
答案 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;
}