• IOS 数据加密总结(及MD5加密)


     
    数据安全总结


    1.网络数据加密
    1> 加密对象:隐私数据,比如密码、银行信息
    2> 加密方案
    * 提交隐私数据,必须用POST请求
    * 使用加密算法对隐私数据进行加密,比如MD5
    3> 加密增强:为了加大破解的难度
    * 对明文进行2次MD5 : MD5(MD5($pass))
    * 先对明文撒盐,再进行MD5 : MD5($pass.$salt)

    2.本地存储加密
    1> 加密对象:重要的数据,比如游戏数据

    3.代码安全问题
    1> 现在已经有工具和技术能反编译出源代码:逆向工程
    * 反编译出来的都是纯C语言的,可读性不高
    * 最起码能知道源代码里面用的是哪些框架

    2> 参考书籍:《iOS逆向工程》

    3> 解决方案:发布之前对代码进行混淆
    * 混淆之前
    @interface HMPerson :NSObject
    - (void)run;
    - (void)eat;
    @end

    * 混淆之后
    @interface A :NSObject
    - (void)a;
    - (void)b;
    @end

    #import "HMViewController.h"
    #import "MBProgressHUD+MJ.h"
    #import "NSString+Hash.h"
    
    @interface HMViewController ()
    @property (weak, nonatomic) IBOutlet UITextField *usernameField;
    @property (weak, nonatomic) IBOutlet UITextField *pwdField;
    - (IBAction)login;
    @end
    
    @implementation HMViewController
    
    
    /**
     *  登录逻辑
     */
    - (IBAction)login
    {
        // 1.表单验证(输入验证)
        NSString *username = self.usernameField.text;
        if (username.length == 0) { // 没有输入用户名
            [MBProgressHUD showError:@"请输入用户名"];
            return;
        }
        
        NSString *pwd = self.pwdField.text;
        if (pwd.length == 0) { // 没有输入密码
            [MBProgressHUD showError:@"请输入密码"];
            return;
        }
        
        // 弹框
        [MBProgressHUD showMessage:@"正在拼命登录中..."];
        
        // 2.发送请求给服务器(带上帐号和密码)
        // POST请求:请求体
        
        // 2.1.设置请求路径
        NSURL *url = [NSURL URLWithString:@"http://192.168.1.200:8080/MJServer/login"];
        
        // 2.2.创建请求对象
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 默认就是GET请求
        request.timeoutInterval = 5; // 设置请求超时
        request.HTTPMethod = @"POST"; // 设置为POST请求
        
        // 通过请求头告诉服务器客户端的类型
        [request setValue:@"ios" forHTTPHeaderField:@"User-Agent"];
        
    #warning
        pwd = [[pwd stringByAppendingString:@"abcdefg"] md5String]; // 进行MD5加密
        
        // 设置请求体
        NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@", username, pwd];
        request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];
        
        // 2.3.发送请求
        NSOperationQueue *queue = [NSOperationQueue mainQueue];
        [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {  // 当请求结束的时候调用 (拿到了服务器的数据, 请求失败)
            // 隐藏HUD (刷新UI界面, 一定要放在主线程, 不能放在子线程)
            [MBProgressHUD hideHUD];
            
            /**
             解析data :
             {"error":"用户名不存在"}
             {"error":"密码不正确"}
             {"success":"登录成功"}
             */
            if (data) { // 请求成功
                NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
                NSString *error = dict[@"error"];
                if (error) { // 登录失败
                    [MBProgressHUD showError:error];
                } else { // 登录成功
                    NSString *success =  dict[@"success"];
                    [MBProgressHUD showSuccess:success];
                }
            } else { // 请求失败
                [MBProgressHUD showError:@"网络繁忙, 请稍后再试"];
            }
        }];
    }
    
    @end
  • 相关阅读:
    有没有用户体验+UI+前端集于一身的人
    ruby array.count
    ruby subset
    向李刚同学道歉
    rails3转载
    RVM and Capistrano
    paperclip自定制文件名
    ruby爬虫
    rails3已经内置subdomain
    摘录
  • 原文地址:https://www.cnblogs.com/liuwj/p/6605845.html
Copyright © 2020-2023  润新知