IOS-网络(数据安全:MD5加密)

 

  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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值