网络编程归纳总结四阶段
来源:互联网 发布:淘宝网店推广方法 编辑:程序博客网 时间: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
- 网络编程归纳总结四阶段
- 网络编程归纳总结二阶段
- 网络编程归纳总结三阶段
- 网络编程归纳总结五阶段
- 网络编程归纳总结六阶段
- 网络编程归纳总结七阶段
- 网络编程归纳总结八阶段
- 网络编程归纳总结九阶段
- 网络编程归纳总结一阶段
- windows网络编程_阶段总结(1)
- 网络阶段总结
- Python网络爬虫阶段总结
- 实训阶段知识总结和归纳(一)
- 实训阶段知识总结和归纳(二)
- java学习阶段归纳总结记录-for循环嵌套
- STL学习(四)阶段简单总结
- 网络基础总结之找工作阶段
- 网络编程四
- C语言使用可变参数函数
- CodeForces 615C Running Track【暴力模拟】
- 实验5-5 使用函数求素数和 (20分)
- Xcode7HTTP请求以及真机调试
- STL容器介绍
- 网络编程归纳总结四阶段
- 深入分析JavaWeb Item51 -- Spring依赖注入
- iframe 调用Servlet 更改 父页面的url
- bitset查找质数
- jQuery网页背景灯光闪烁特效
- 8.php装饰器模式
- [BZOJ2435][Noi2011]道路修建
- 单例模式的C++简单实现
- 纯CSS3 太极效果