网络编程归纳总结四阶段

来源:互联网 发布:淘宝网店推广方法 编辑:程序博客网 时间:2024/06/07 10:04

网络编程归纳总结四阶段

请求

在HTTP/1.1协议中,定义了8种发送http请求的方法
GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT、PATCH
最常用的是GET和POST
网页中演示GET和POST

GET和POST对比
GET

i. GET一般是获取服务器上的数据
ii. GET方式是通过url传递数据,效率高
iii. 请求的数据在URL上,不安全
1) login.php?username=zs&pwd=123456
2) 参数中如果有中文和空格应该进行url编码
iv. GET请求的结果能够被浏览器缓存

POST

i. POST一般是往服务器提交数据,并获取服务器返回的结果
ii. POST方式是通过请求体传输数据,效率低
iii. 请求的数据用户看不到,相对安全
iv. POST请求不能被浏览器缓存

url中的参数

a. login.php负责处理登陆过程的服务端脚本
b. ? 后面跟要传到服务器上的参数(http协议的一部分)
c. 参数以 键=值 的形式传递
d. 如果有多个参数使用&连接
http://127.0.0.1/php/login.php?username=admin&password=123

Get请求模拟登陆
NSString *name = @"zhangsan";    NSString *pwd = @"zhang";    //请求的地址    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://127.0.0.1/php/login.php"]];    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    //设置post    request.HTTPMethod = @"post";    //设置请求体    NSString *bodyString = [NSString stringWithFormat:@"username=%@&password=%@",name,pwd];    request.HTTPBody = [bodyString dataUsingEncoding:NSUTF8StringEncoding];    //发送异步请求    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {        //省略错误处理        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];        NSLog(@"%@",dic);    }];
Post请求模拟登陆
NSString *name = @"zhangsan";    NSString *pwd = @"zhang";//请求的地址    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://127.0.0.1/php/login.php"]];    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    //设置post    request.HTTPMethod = @"post";//设置请求体    NSString *bodyString = [NSString stringWithFormat:@"username=%@&password=%@",name,pwd];    request.HTTPBody = [bodyString dataUsingEncoding:NSUTF8StringEncoding];//发送异步请求    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {//省略错误处理        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];        NSLog(@"%@",dic);    }];
编码

URL参数中如果有汉字、空格需要进行特殊处理否则,创建NSURL会返回nil
URL编码就是把汉字、空格,转换成%+16进制数的形式

//此方法只能把汉字和空格进行%转义  此方法在iOS9中过时   urlString =  [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; //此方法可以设置哪些字符不进行%转义 urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

base64

base64对密码“加密”

base64编码—本质是编码不是加密
可以将任意的二进制数据编码成字符串,在网络上传输
在终端中演示

####base64编码base64 xx.png -o abc.txt   编码文件echo -n "Man" | base64           编码字符串base64解码base64 abc.txt -o xx.png -D    解码文件echo -n "TWFu" | base64 -D           解码字符串
base64编码的原理

编码后的数据由 a-z A-Z 0-9 + / = 表示
把一个字符转换成二进制取出前6位查表
不够6位的时候补0,如果是8位,则补4个0 ,编码后连接两个==
如果最后是4位,补2个0,编码后连接一个=
编码之后文件会变大,是源文件的4/3 —12/8 6/4 — 3/2
1. 登录成功后”加密”密码,并保存到沙盒
2. 加载的时候从沙盒中读取密码,并”解密”
3. 登录,发送网络请求的时候”加密”密码,服务器验证的时候验证”加密”后的密码
4. 网络应用程序的数据安全
a. 网络上不允许传输用户隐私数据的“明文”
b. 在本地不允许保存用户隐私数据的“明文”

base64编码解码的方法:
//base64的编码 -- iOS7以后 系统提供了编码和解码的方法,不再需要第三方框架- (NSString *)base64EncodeStr:(NSString *)str{    //把字符串转换成二进制    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];    //base64编码    return [data base64EncodedStringWithOptions:0];}//base64解码- (NSString *)base64DecodeStr:(NSString *)str{    //base64解码字符串,返回二进制数据    NSData *data = [[NSData alloc] initWithBase64EncodedString:str options:0];    //二进制数据转换为字符串    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];}

加密

对称算法

加密解密都使用相同的秘钥
速度快,适合对大数据加密
DES,3DES,AES

非对称算法

算法公开,可逆的加密算法
用公钥加密,用私钥解密
用私钥加密,用公钥解密
速度慢,适合对小数据加密
RSA
普遍的加密
秘钥的安全要求很高的话,可以先用RSA加密AES的秘钥

散列算法

不可逆加密:MD5、SHA1、SHA256、SHA512

MD5算法

对任意的数据源 计算,生成固定长度的字符串。32个字符
一般用来加密密码
计算文件的md5值,用户可以验证从网络上下载的文件是否在下载的过程中被修改了
终端测试md5
md5 -s “admin”
结果: 21232f297a57a5a743894a0e4a801fc3
模拟用户登录中改用md5加密

破解md5,暴力破解(md5是不可逆的)

百度–在线破解md5

防止被暴力破解

加盐
原密码+一个复杂的字符串,防止用户输入的密码过于简单
HMAC
原密码+一个字符串 进行混合再 md5计算 把计算的结果+原密码 再进行md5计算
md5+时间,每次生成的md5值不一样
一个字符串key md5计算
把原密码和之前生成的md5值再进行hmac加密
从服务器获取当前时间 到分钟 的字符串
第二步产生的hmac值+时间 和第一步产生的md5值进行hmac加密

钥匙串

通过系统提供的钥匙串功能可以在本地保存密码,系统使用AES的方式对密码加密
查看Safari中保存的密码
使用第三方框架SSKeychain把密码保存到钥匙串和获取钥匙串中的密码

获取钥匙串中的所有用户[SSKeychain allAccounts]把密码保存到钥匙串中  service可以用bundleID[SSKeychain setPassword:self.pwdView.text forService:kPWDCHAINKEY account:self.nameView.text];从钥匙串中获取密码self.pwdView.text = [SSKeychain passwordForService:kPWDCHAINKEY account:self.nameView.text]; 

最近才开始往github上放东西 在公司写的又不能放= = 大家姑且看看吧

github地址: https://github.com/FuThD

1 0
原创粉丝点击