网络编程归纳总结四阶段

网络编程归纳总结四阶段

请求

在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《Java网络编程(第四版)》是一本经典的Java网络编程领域的教材。本书通过系统、全面地介绍了Java网络编程的相关概念和技术,为开发人员提供了深入理解和实践网络编程的基础。 本书主要内容包括:网络基础知识,如网络协议、套接字、HTTP等;Java网络编程的基本概念和技术,如TCP/IP协议、UDP协议、Socket编程等;Java网络编程的高级特性,如IO多路复用、非阻塞IO、分布式编程等;网络编程的安全性和性能优化,如SSL、数据压缩、Socket选项等;以及一些实际应用场景的案例分析等。 本书的特点有以下几个方面: 1. 系统性:本书从网络基础知识入手,逐步介绍了Java网络编程的方方面面,帮助读者建立起完整的网络编程知识体系。 2. 实践性:本书通过大量的实例和案例,以及对常见问题的解答,帮助读者巩固所学知识,培养实际应用网络编程的能力。 3. 全面性:本书不仅涵盖了基础的网络编程技术,还介绍了一些高级特性和实际应用场景,让读者能够更全面地理解和掌握网络编程。 4. 更新性:作为第四版,本书对于Java网络编程的最新发展进行了更新和补充,能够帮助读者跟上网络编程领域的最新动态。 总之,《Java网络编程(第四版)》是一本权威、全面、实践性强的网络编程教材,适合想要深入学习和应用Java网络编程的开发人员阅读。无论是初学者还是有一定经验的开发人员,都能从本书中获得很多有价值的知识和经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值