您的位置:首页 > 理论基础 > 计算机网络

网络编程四阶段总结

2016-01-12 21:58 295 查看

网络编程四阶段总结

请求

在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请求模拟登陆

[code]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请求模拟登陆

[code]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进制数的形式

[code]//此方法只能把汉字和空格进行%转义  此方法在iOS9中过时
   urlString =  [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

 //此方法可以设置哪些字符不进行%转义
 urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];


base64

base64对密码“加密”

base64编码—本质是编码不是加密

可以将任意的二进制数据编码成字符串,在网络上传输

在终端中演示

[code]####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编码解码的方法:

[code]//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把密码保存到钥匙串和获取钥匙串中的密码

[code]获取钥匙串中的所有用户
[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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: