当前位置

网站首页> 程序设计 > 开源项目 > 程序开发 > 浏览文章

iOS 字符编码篇 base64 md5

作者:小梦 来源: 网络 时间: 2024-06-01 阅读:
//返回字符串经过md5加密后的字符+(NSString*)stringDecodingByMD5:(NSString*)str;-(NSString*)md5DecodingString;///生成16位md5-(NSString*)md5StringFor16;//返回经base64编码过后的数据+(NSString*)base64Encode:(NSData *)data;-(NSString*)base64Encode;//返回经base64解码过后的数据+(NSString*) base64Decode:(NSString *)string;-(NSString*)base64Decode;
 //返回字符串经过md5加密后的字符+(NSString*)stringDecodingByMD5:(NSString*)str{    const char * cStr = [str UTF8String];    unsigned char result[32];    extern unsigned char *CC_M5(const void *data, CC_LONG len, unsigned char *md);    CC_MD5( cStr, (CC_LONG)strlen(cStr), result );    return [[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]] lowercaseString];}-(NSString*)md5DecodingString{    return [NSString stringDecodingByMD5:self];}-(NSString*)md5StringFor16{    NSString *md5Str = [NSString stringDecodingByMD5:self];    if (md5Str) {        return [md5Str substringWithRange:NSMakeRange(8, 16)];    }    return nil;}+(NSString*) base64Decode:(NSString *)string{    unsigned long ixtext, lentext;    unsigned char ch, inbuf[4], outbuf[4];    short i, ixinbuf;    Boolean flignore, flendtext = false;    const unsigned char *tempcstring;    NSMutableData *theData;        if (string == nil) {        return nil;    }        ixtext = 0;        tempcstring = (const unsigned char *)[string UTF8String];        lentext = [string length];        theData = [NSMutableData dataWithCapacity: lentext];        ixinbuf = 0;        while (true) {        if (ixtext >= lentext){break;        }    ch = tempcstring [ixtext++];    flignore = false;    if ((ch >= 'A') && (ch <= 'Z')) {ch = ch - 'A';        } else if ((ch >= 'a') && (ch <= 'z')) {ch = ch - 'a' + 26;        } else if ((ch >= '0') && (ch <= '9')) {ch = ch - '0' + 52;        } else if (ch == '+') {ch = 62;        } else if (ch == '=') {flendtext = true;        } else if (ch == '/') {ch = 63;        } else {flignore = true;        }    if (!flignore) {short ctcharsinbuf = 3;Boolean flbreak = false;if (flendtext) {    if (ixinbuf == 0) {        break;    }        if ((ixinbuf == 1) || (ixinbuf == 2)) {        ctcharsinbuf = 1;    } else {        ctcharsinbuf = 2;    }        ixinbuf = 3;        flbreak = true;}inbuf [ixinbuf++] = ch;if (ixinbuf == 4) {    ixinbuf = 0;        outbuf[0] = (inbuf[0] << 2) | ((inbuf[1] & 0x30) >> 4);    outbuf[1] = ((inbuf[1] & 0x0F) << 4) | ((inbuf[2] & 0x3C) >> 2);    outbuf[2] = ((inbuf[2] & 0x03) << 6) | (inbuf[3] & 0x3F);        for (i = 0; i < ctcharsinbuf; i++) {        [theData appendBytes: &outbuf[i] length: 1];    }}if (flbreak) {    break;}        }    }        return [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];// theData;}-(NSString*)base64Decode{    return [NSString base64Decode:self];}+(NSString*) base64Encode:(NSData *)data{    static char base64EncodingTable[64] = {        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',        'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',        'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',        'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'    };    int length = (int)[data length];    unsigned long ixtext, lentext;    long ctremaining;    unsigned char input[3], output[4];    short i, charsonline = 0, ctcopy;    const unsigned char *raw;    NSMutableString *result;        lentext = [data length];    if (lentext < 1)        return @"";    result = [NSMutableString stringWithCapacity: lentext];    raw = [data bytes];    ixtext = 0;        while (true) {        ctremaining = lentext - ixtext;        if (ctremaining <= 0)break;        for (i = 0; i < 3; i++) {unsigned long ix = ixtext + i;if (ix < lentext)    input[i] = raw[ix];else    input[i] = 0;        }        output[0] = (input[0] & 0xFC) >> 2;        output[1] = ((input[0] & 0x03) << 4) | ((input[1] & 0xF0) >> 4);        output[2] = ((input[1] & 0x0F) << 2) | ((input[2] & 0xC0) >> 6);        output[3] = input[2] & 0x3F;        ctcopy = 4;        switch (ctremaining) {case 1:    ctcopy = 2;    break;case 2:    ctcopy = 3;    break;        }    for (i = 0; i < ctcopy; i++)[result appendString: [NSString stringWithFormat: @"%c", base64EncodingTable[output[i]]]];    for (i = ctcopy; i < 4; i++)[result appendString: @"="];    ixtext += 3;        charsonline += 4;    if ((length > 0) && (charsonline >= length))charsonline = 0;    }    return result;}-(NSString*)base64Encode{    return [NSString base64Encode:[self dataUsingEncoding:NSUTF8StringEncoding]];}

热点阅读

网友最爱