MD5 信息摘要
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| @implementation NSString (Encryption)
- (NSString *)md5String{ //先转为UTF_8编码的字符串 const char* str = [self UTF8String]; //设置一个接受字符数组 //md5加密后是128bit, 16 字节 * 8位/字节 = 128 位 unsigned char result[CC_MD5_DIGEST_LENGTH]; /* extern unsigned char *CC_MD5(const void *data, CC_LONG len, unsigned char *md)官方封装好的加密方法 把str字符串转换成了32位的16进制数列(这个过程不可逆转) 存储到了result这个空间中 */ CC_MD5(str, strlen(str), result); NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH* 2]; /* x表示十六进制,%02X 意思是不足两位将用0补齐,如果多余两位则不影响 NSLog("%02X", 0x888); //888 NSLog("%02X", 0x4); //04 */ //将16字节的16进制转成32字节的16进制字符串 for(int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) { [ret appendFormat:@"%02x",result[i]]; } return ret; }
|
Base64编码
Base64编码可用于在HTTP环境下传递较长的标识信息
编码过程
- 将字符串转码为ascii码
- 将ascii码转换为二进制码
- 将二进制转为6个一组
- 6位前面补高位00
- 将二进制转化为ascii码
1
| 3*8=4*6
内存1个字符占8位
转前: s 1 3
先转成ascii:对应 115 49 51
2进制: 01110011 00110001 00110011
6个一组(4组) 011100110011000100110011
然后才有后面的 011100 110011 000100 110011
然后计算机是8位8位的存数 6不够,自动就补两个高位0了
所有有了 高位补0
科学计算器输入 00011100 00110011 00000100 00110011
得到 28 51 4 51
查对下照表 c z E z
|