iOS加密的几种方式 // JWDev 

JerryXia 发表于 , 阅读 (0)

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环境下传递较长的标识信息

编码过程

  1. 将字符串转码为ascii码
  2. 将ascii码转换为二进制码
  3. 将二进制转为6个一组
  4. 6位前面补高位00
  5. 将二进制转化为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