数据安全总结

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 == ) { // 没有输入用户名
[MBProgressHUD showError:@"请输入用户名"];
return;
} NSString *pwd = self.pwdField.text;
if (pwd.length == ) { // 没有输入密码
[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 = ; // 设置请求超时
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

最新文章

  1. Markdown 文档格式编写语法
  2. Epson机械手4轴6轴示意图
  3. 每天一个linux命令(19):Linux 目录结构
  4. Maven搭建webService (二) 创建服务端---使用web方式发布服务
  5. WPF编程学习——动画
  6. Android核心基础(手机卫士的一个知识点总结)
  7. Apache MINA 框架之Handler介绍
  8. POJ 3356(最短编辑距离问题)
  9. Docker aufs存储驱动layer、diff、mnt目录的区别
  10. Python常见的错误汇总
  11. JAVA描述的简单ORM框架
  12. android值得珍藏的6个开源框架技术
  13. 用SQL将JSON数据输出表值数据
  14. git 解决二进制文件冲突
  15. Python全栈学习_day003作业
  16. Scss基础用法
  17. Moleskine智能笔+专用本:写完随时传到手机
  18. 让外部网络访问K8S service的四种方式
  19. Chip Factory(HDU5536 + 暴力 || 01字典树)
  20. 选择合适的项目-任务管理工具Jira Redmine Trac对比

热门文章

  1. mariaDB 远程连接不上
  2. thinkPHP5.0获取器
  3. SpringBoot中使用Servlet
  4. 大型分布式java应用与SOA
  5. 这是通过 Open Live Writer(是个博客编辑器) 发布的
  6. 可视化开发_AppInventor2似乎被抛弃了
  7. RTT学习之BSP
  8. Django重新整理3
  9. fireFox在中国的https网站的时候,老会出 ssl_error_unsupported_version 这个错误。
  10. stm32 输入捕获学习(二)