iOS下使用md5码(转)

来源:互联网 发布:中世纪优化9圣物 编辑:程序博客网 时间:2024/06/16 08:44
因为密码不能明文传送,一般都会使用md5码来给服务器发送密码,如果是动态密码,客户端与服务器端会效对时间,然后客户端与服务器端使用相同的与时间相关的随机数种子和一个固定的编码,再加一些设备信息,进行md5计算或者其他hash计算方法就可以得到一个动态的数据加密密码。所有客户端与服务器端的数据都通过这个动态密码来加密。这样可以使用客户端与服务器端之间的数据就会很安全。
一般的密码都有公钥和私钥之分,这是利用了素数只能被自已和1整除的性质。所以,一般情况下可以使用两个大素数的乘积来作为密码种子,当我们设置密码时,会有套固定的算法来为我们的密码生成一个公钥和一个私钥。私钥就是这两个大素数的乘积。大素数分解因式是一个非常耗时的工作,现在又没有什么更好的办法来对大素数分解因式,所能使用的方法只能是一个一个数试。根据目前所知道的情况,素数的数量是无限的,可以无限大。

#import <CommonCrypto/CommonDigest.h>


//md5 32位 加密 (大写)
+ (NSString *)md5:(NSString *)str {
    const char *cStr = [str UTF8String];
    unsigned char result[32];
    CC_MD5( cStr, strlen(cStr), result );
    return [NSString stringWithFormat:
            @"xxxxxxxxxxxxxxxx",
            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],
            result[16], result[17],result[18], result[19],
            result[20], result[21],result[22], result[23],
            result[24], result[25],result[26], result[27],
            result[28], result[29],result[30], result[31]];
}
//md5 16位加密 (大写)
-(NSString *)md5:(NSString *)str {
    constchar *cStr = [str UTF8String];
    unsignedchar result[16];
    CC_MD5( cStr, strlen(cStr), result );
    return [NSStringstringWithFormat:
            @"%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]
            ]; 
}

NSString字符串的大小写切换使用下边的方法,所以得到的md5不论是大写还是小写问题都不大。
1)lowercaseString:将改变成小写的字符串
2)uppercaseString:字符串将改为大写
转自:http://www.cocoachina.com/bbs/read.php?tid=97570