MD5转换2

以前总结里(http://blog.csdn.net/chengan1993/article/details/50506766)有把字符串转成md5样式的.今天后台给我们一个标准md5的字符串”4QrcOUm6Wau+VuBX8g+IPg==”,经过网站解密为”123456”,但是用以前加密的方法却是32位的十六进制数(e10adc3949ba59abbe56e057f20f883e),并没有特殊符号,经过同事一番研究终于搞出来了,现贴代码如下:

+(NSString *)newMD5:(NSString *)str{
    const char *cStr = [str UTF8String];
    unsigned char result[16];
    CC_MD5(cStr, (unsigned)strlen(cStr), result); // This is the md5 call

   NSString * restultStr = [NSString stringWithFormat:
                             @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
                             result[0], result[1], result[2], result[3],
                             result[4], result[5], result[6], result[7],
                             result[8], result[9], result[10], result[11],
                             result[12], result[13], result[14], result[15]
                             ];
    //    如果初步md5为空,返回空
    if (!restultStr || [restultStr length] == 0) {
        return nil;
    }

   //    创建一个8个容量的可变data
    NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:8];
    NSRange range;
    //    如果长度为偶数
    if ([restultStr length] % 2 == 0) {
        range = NSMakeRange(0, 2);
    } else {
        range = NSMakeRange(0, 1);
    }
    for (NSInteger i = range.location; i < [restultStr length]; i += 2) {
        unsigned int anInt;
        NSString *hexCharStr = [restultStr substringWithRange:range];
        NSScanner *scanner = [[NSScanner alloc] initWithString:hexCharStr];

   [scanner scanHexInt:&anInt];
   NSData *entity = [[NSData alloc] initWithBytes:&anInt length:1];
    [hexData appendData:entity];
          range.location += range.length;
        range.length = 2;
    }
    NSString * finalStr = [hexData base64EncodedStringWithOptions:0];
    return finalStr;
}

结果
MD5转换2_第1张图片
警告:晚饭不能吃太多,容易撑.

你可能感兴趣的:(iOS学习总结)