1 //
  2 //  ViewController.m
  3 //  IOS_0129_HTTP请求
  4 //
  5 //  Created by ma c on 16/1/29.
  6 //  Copyright © 2016年 博文科技. All rights reserved.
  7 //
  8
  9 #import "ViewController.h"
 10 #import "MBProgressHUD+MJ.h"
 11 #import "NSString+Hash.h"
 12
 13 @interface ViewController ()
 14 @property (weak, nonatomic) IBOutlet UITextField *textName;
 15 @property (weak, nonatomic) IBOutlet UITextField *textPassword;
 16
 17 - (IBAction)btnlogin;
 18
 19 @end
 20
 21 @implementation ViewController
 22
 23 /*
 24
 25  网络安全
 26  1.常见加密算法
 27    MD5\SHA\DES\3DES\RC2和RC4\RSA\IDEA\DSA\AES
 28  2.加密算法的选择
 29    一般公司都有自己的加密方案,按照公司的接口文档的规定去加密
 30  3.MD5
 31  1>全称:“Message Digest Algorithem5”,译为“消息摘要算法第五版”
 32  2>效果:对输入信息生成唯一的128位散列值(32个字符)
 33  3>特点:
 34    a.输入两个不同的明文不会得到两个相同的输出值
 35    b.根据输出值,不会得到原始的明文,即其过程不可逆
 36  4>应用
 37    a.MD5加密算法有较好的安全性,而且免费,因此该加密算法被广泛应用
 38    b.主要运用在数字签名、文件完整性验证以及口令加密等方面
 39  5>MD5解密网站:http://www.cmd5.com
 40
 41  2.网络数据加密
 42  1>加密对象:隐私数据,比如密码,银行信息
 43  2>加密方案
 44    a.提交隐私数据必须用POST请求
 45    b.使用加密算法对隐私数据进行加密,比如MD5
 46  3>加密增强:加大破解难度
 47    a.对明文进行两个MD5加密:MD5(MD5($pass))
 48    b.先对明文进行撒盐,在进行MD5加密:MD5($pass.$salt)
 49
 50  3.本地存储加密
 51  1>加密对象:重要数据,比如单击游戏数据
 52
 53  4.代码安全问题
 54  1>现在已经有工具和技术能反编译出源代码:逆向工程
 55  2>问题:现在反编译出来的都是C语言代码,可读性不高
 56  3>优点:最起码能知道源代码里面用的是那些框架 ->指导我们开发不了解的软件
 57  4>解决方案:混淆代码
 58
 59  */
 60
 61 - (void)viewDidLoad {
 62     [super viewDidLoad];
 63
 64     self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
 65 }
 66
 67 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
 68 {
 69     [self.view endEditing:YES];
 70 }
 71
 72 - (IBAction)btnlogin {
 73
 74     NSString *usernameText = self.textName.text;
 75     if (usernameText.length == 0) {
 76         [MBProgressHUD showError:@"请输入账号"];
 77         return;
 78     }
 79
 80     self.textPassword.secureTextEntry = YES;
 81     NSString *password = self.textPassword.text;
 82     if (password.length == 0) {
 83         [MBProgressHUD showError:@"请输入密码"];
 84         return;
 85     }
 86     // 增加蒙板
 87     [MBProgressHUD showMessage:@"正在拼命加载..."];
 88
 89     //2.POST请求
 90     NSString *strURL = @"http://localhost:8080/MJServer/login";
 91     NSURL *url = [NSURL URLWithString:strURL];
 92     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
 93
 94     //5s后请求超时(默认60s超时)
 95     request.timeoutInterval = 5;
 96     //设置请求方式
 97     request.HTTPMethod = @"POST";
 98     //设置请求头
 99     [request setValue:@"iPhone6" forHTTPHeaderField:@"User-Agent"];
100     //对密码进行加密
101     password = [self doubleMD5:password];
102     password = [self MD5Salt:password];
103     password = [self MD5Reorder:password];
104     //设置请求体
105     NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@",usernameText,password];
106     //NSString -> NSData
107     request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];
108
109     //异步请求
110     [self sendAsyncWithRequest:request];
111
112 }
113 //异步请求
114 - (void)sendAsyncWithRequest:(NSURLRequest *)request
115 {
116     NSOperationQueue *queue = [NSOperationQueue mainQueue];
117
118     [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
119
120         //隐藏蒙版
121         [MBProgressHUD hideHUD];
122         NSHTTPURLResponse *resp = (NSHTTPURLResponse *)response;
123         NSString *msg = [NSHTTPURLResponse localizedStringForStatusCode:resp.statusCode];
124         NSLog(@"%ld %@ %@",resp.statusCode, msg, resp.allHeaderFields);
125
126         //这个block会在请求完毕的时候自动调用
127         if (connectionError || data == nil) {
128             [MBProgressHUD showError:@"请求失败"];
129             return;
130         }
131         //解析服务器返回的JSON数据
132         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
133         NSString *error = dict[@"error"];
134         if (error) {
135             [MBProgressHUD showError:error];
136         }
137         else{
138             NSString *success = dict[@"success"];
139             [MBProgressHUD showSuccess:success];
140         }
141     }];
142 }
143
144 ///两次加密
145 - (NSString *)doubleMD5:(NSString *)text
146 {
147     return [[text md5String] md5String];
148 }
149
150 ///先撒盐,在进行MD5加密
151 - (NSString *)MD5Salt:(NSString *)text
152 {
153     NSString *salt = [text stringByAppendingString:@"abc"];
154     return [salt md5String];
155 }
156 ///先加密,后乱序
157 - (NSString *)MD5Reorder:(NSString *)text
158 {
159     //加密
160     NSString *pwd = [text md5String];
161
162     NSString *prefix = [pwd substringFromIndex:2];
163     NSString *subfix = [pwd substringToIndex:2];
164
165     //乱序
166     NSString *result = [prefix stringByAppendingString:subfix];
167
168     return result;
169 }
170
171 @end

IOS-网络(数据安全:MD5加密)相关推荐

  1. IOS开发之MD5加密和钥匙串的使用-oc

    IOS开发之MD5加密和钥匙串的使用-oc 源码在我的主页,md5加密是用户登录安全的一个保障.不可逆的,可以暴力破解的. // // ViewController.m // MD5演练 // // ...

  2. ios android md5加密,iOS中使用MD5加密

    在iOS中使用MD5加密较简单,需要引入头文件CommonCrypto/CommonDigest.h,我们单独新建一个用于MD5加密的类Encryption,此类继承NSObject. Encrypt ...

  3. iOS 加密算法之MD5加密使用

    2020.06.04编辑 前言 对于加密算法这个概念我的确不太清楚,虽然我知道加密算法存在的意义,但是这并不妨碍我不知道加密算法具体都有哪些.所以今天这篇文章就是了大家一起学习开发中哪些加密算法. 在 ...

  4. IOS(objective-c)实现md5加密(32位小写)的工具类

    我们编程中,md5加密是个经常会用到的功能.下面是我封装好的一个实现字符串md5加密的工具类. MD5Util.h #import <Foundation/Foundation.h>@in ...

  5. iOS简单MD5加密

    iOS简单的MD5加密 1.引入头文件 #import <CommonCrypto/CommonDigest.h> 2.在controller中写一个加密方法,使用的时候调用 #pragm ...

  6. iOS经常使用加密方式(MD5,AES,BASE64)与网络数据安全

    演示样例项目下载地址  https://github.com/cerastes/Encryption 1MD5 创建MD5类 #import <Foundation/Foundation.h&g ...

  7. iOS 网络传输数据安全以及常用的加密算法使用

    我们常说的数据安全:主要分为两种,数据本身的安全和数据防护安全. 数据本身的安全包括数据保密,数据完整性验证,数据双向认证等. 数据防护安全包括磁盘阵列,数据备份,异地容灾等. App安全问题主要包括 ...

  8. 微信小程序------MD5加密(支持中文和不支持中文)和网络请求(get和post)

    2019独角兽企业重金招聘Python工程师标准>>> 开发中常常遇到MD5加密,最近做小程序也用到了,简单总结了一下: 这要有两个加密文件,一个不支持中文,一个支持,所以你选择支持 ...

  9. md5 ios java代码_IOS端與Java端MD5加密方法

    關於NSString的MD5加密,這不難,在網上可以搜到很多算法,主要是跟后台的統一會出問題,對同一段字符串,ios和java加密后的結果可能不一樣,很坑爹.現在貼一下ios端和后台java的代碼. ...

最新文章

  1. 《软件测试经验与教训》之二——测试内容先后顺序
  2. 我想知道怎么求N的N次方
  3. python波士顿房价是什么数据,Python数据分析 | 波士顿房价回归分析
  4. Arcgis for android 100.4 getFieldType ()
  5. 基于SSM的猫头鹰在线视频网站
  6. Dev c++6.0下载
  7. OPNET中使用外部文件
  8. Micrium uC-Probe STM32调试工具 ucosIIucosIII
  9. 智课雅思词汇---九、mon是什么意思
  10. RxJava模式与原理-----标准观察者与RxJava观察者
  11. 「BJOI 2019」排兵布阵
  12. 5G NR MCG,SCG,PCell,PSCell,SCell,sPCell 概念
  13. 基于SpringBoot的社区综合治理系统设计与实现
  14. 投影仪哪些比较好?投影仪如何选购
  15. 【Axure10基础教程】第七章 设置文本
  16. 最详细的Java入门完整教程,学Java先收藏了
  17. 每日一学—text-decoration 属性
  18. 响铃:聚焦图片版权,百度区块链产品“图腾”如何打好这副牌
  19. call()、apply()、bind()的区别
  20. glc四驱软件测试,【图】独家官方答复 奔驰GLC四驱情况新进展_汽车之家

热门文章

  1. 理解 CI 和 CD 之间的区别(翻译)
  2. Java™ 教程(控制流语句)
  3. Jquery根据JSON生成Table
  4. jenkins添加linux作为slave
  5. heartbeat与keepalived对比
  6. 3、InterruptedException
  7. CGI(通用网关接口)
  8. 那些年干过的事(六)—无源码修改版本号
  9. 虚拟机管理解决方案-VMware篇
  10. Web2.0网站性能调优实践(引用王宗义)