一、非对称加密

  - RSA :

    + 公钥加密,私钥解密;

    + 私钥加密,公钥解密;

    + 只能通过因式分解来破解

二、对称加密

  - DES

  - 3DES

  - AES (高级密码标准,美国国家安全局使用,iOS操作系统内部使用,目前还没有发现过被破解的案例)

三、哈希散列函数 (摘要算法)

  1、常见算法  

    - MD5

    - SHA1

    - SHA256/512

  2、散列函数特点

    - 算法是公开的

    - 对相同的数据加密,得到的结果是一样的

    - 对不同的数据加密,得到的结果是一样长的32位字符 由a-Z 0-9 组成

    - 信息摘要,信息指纹,是用来做识别的,不能反算

  

四、iOS开发两条原则

1、不允许在网络上传递明文的用户隐私信息

  解决方案:

  * 各种加密算法(MD5  AES..........),但是有些算法并不安全,像MD5算法在网上随便找个网站都可以轻松的反加密破解掉 ,以下提供两种安全策略:

    - 加盐

      + 所谓的“盐”,其实可以理解为一串又臭又长的字符串,例如:UYGUYF&**%&**^*(&%&%&^TUGUYRFG^&R^&F^%^R$%ERFV^&VB&^R%^V

      + 客户端用用户的原始密码拼接盐再MD5得到的一串32位字符串发给服务端,服务端也用相同的算法得到字符串来对比结果

      + 盐要足够长,无规则,这样才不容易被破解,盐一般都是写死在本地,对于移动开发来说 只有iOS  安卓  服务器 三个人知道

      + 隐患一: 其实加盐已经算比较安全了,但是假如某天安卓的那哥们嫌自己的工资太低,找老板想要涨工资,老板没批,安卓那哥们直接辞职,并把加密算法和盐通通公布出去,那么GG

      + 隐患二: 换“盐”很麻烦(除非强制升级),所以一旦盐被泄漏了,对公司来说是灾难性的打击!这种角度来说加盐并不安全。

    - HMAC

      + 客户端发出登录请求,服务器返回一个随机值KEY(这里的KEY就是秘钥,也就是说每个账号的KEY都不一样),客户端和服务器均保存这个随机值KEY至本地 

      + 客户端将该随机值KEY和用户的密码进行 hmac 运算,递交给服务器,服务器保存这个值( (KEY+密码)HMAC  ),至此,注册已完成

      + 登录:获取本地的密钥 KEY,(KEY+密码)HMAC发送至服务器,服务器取出保存的值判断密码是否匹配

      + 好处:登录的过程中,黑客截获了我们发送的数据,他也只能得到 hmac 加密过后的结果,拿不到KEY,反加密不出密码,就算是拿到了KEY,也只能破解这一个用户的密码,甚至连服务器也不知道真正的密码,从而保证了安全性

      + 场景:QQ的设备锁,换了设备之后本地拿不到KEY,只能去服务器申请授权,授权成功之后,服务器返回KEY   

      + 隐患:黑客如果知道账号,又截取了密码密文,就能模仿用户登陆,获取权限,所以也不是绝对安全的     

    - HMAC 高端玩法

      + 登录:获取本地的密钥 KEY,(KEY+密码)HMAC+“时间戳精确到分” ,例如:(KEY+密码)HMAC+“201808031543”   发送至服务器

      + 服务器判断,取出保存的值(KEY+密码)HMAC,拼接“201808031544”,与客户端发来的做匹配,若不对,再用  (KEY+密码)HMAC+“201808031543”做匹配

      + 好处:加密后的密文是变化的,黑客拿到密文后在两分钟之内才有效,从而保证了安全性

2、在本地不允许明文的保存用户隐私信息

  解决方案:

    - 保存密文至程序本地,反算回明文后加载进内存 (麻烦)

    - 钥匙串(iOS开发者的福音)

      + 苹果“生态圈”,从iOS7.0.3版本开始,苹果开放给开发者访问!

      + 钥匙串加密方式就是AES加密,可以将保存的密码以明文的方式反算给你

      + 钥匙串苹果原生都是c语言的接口,代码又臭又长,但有三方框架,推荐 SSkeyChain

      + 用到的参数就三个:账号----密码-----包名(Bundle identifier)

  

  以下就是SSkeyChain的所有接口,简单易用:

+ (NSArray *)allAccounts;
+ (NSArray *)accountsForService:(NSString *)serviceName;
+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;
+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account;
+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;

注意xcode要打开下面这个开关:

五、MD5其他用法

1、搜索

场景:在百度搜索三个关键字: “深圳” “福田” “喜年支行”

    打乱关键字顺序: “福田” “喜年支行” “深圳” 

     搜索出的结果是一样的

    原理(方案):将三个关键字转为MD5字符串后 按位相加结果一样

2、版权问题

  - 图片MD5后是一串固定的字符串,只要是原图,MD5之后都是一样的

  - 如果是复制的也一样

  - ps过的图片MD5与原图的MD5是不一样的,文件、视频同理

  - 文件的后缀名不会影响MD5的结果,后缀名只决定操作系统用什么工具打开

转载于:https://www.cnblogs.com/chglog/p/9413158.html

iOS开发——高级篇——iOS开发之网络安全密码学相关推荐

  1. iOS开发UI篇—IOS开发中Xcode的一些使用技巧

    iOS开发UI篇-IOS开发中Xcode的一些使用技巧 一.快捷键的使用 经常用到的快捷键如下: 新建 shift + cmd + n     新建项目 cmd + n             新建文 ...

  2. Nginx 模块开发高级篇

    Nginx 模块开发高级篇 变量 综述 在Nginx中同一个请求需要在模块之间数据的传递或者说在配置文件里面使用模块动态的数据一般来说都是使用变量,比如在HTTP模块中导出了host/remote_a ...

  3. Mall商城的高级篇的开发(二)性能压测和性能监控

    Mall商城的高级篇的开发(二) 性能压测–压力测试 压力测试考察当前软件硬件环境下系统所能承受的最大负荷并帮助找出系统的瓶颈所在.压测都是为了系统在上线的处理能力和稳定性维持在一个标准的范围内,做到 ...

  4. [洪流学堂]Hololens开发高级篇5:空间映射(Spatial mapping)

    本教程基于Unity2017.2及Visual Studio 2017 本教程编写时间:2017年12月16日 本文内容提要 空间映射让holograms了解周围环境,将真实世界和虚拟世界更好地结合在 ...

  5. [洪流学堂]Hololens开发高级篇3:语音(Voice)

    本教程基于Unity2017.2及Visual Studio 2017 本教程编写时间:2017年12月8日 本文内容提要 设计语音命令并针对Hololens语音引擎优化 让用户知道可以用什么语音命令 ...

  6. [洪流学堂]Hololens开发高级篇2:手势(Gesture)

    本教程基于Unity2017.2及Visual Studio 2017 本教程编写时间:2017年12月7日 本文内容提要 当跟踪到用户的手时提供反馈 使用导航手势旋转hologram 当用户的手要离 ...

  7. AgileEAS.NET平台开发实例-药店系统-报表开发(高级篇)

    开篇 上篇我们讲述了报表开发的独立开发与基于平台的开发二种方式,相信大家已经对报表开发有了一定的了解,那么我们本篇将会巩固大家对报表开发的知识,我们这里提供一 个我们平时在项目中应用到的一些关于报表开 ...

  8. cesium 页面截图_Cesium开发入门篇 | 02Cesium开发环境搭建及第一个示例

    01 开发环境准备 利用Cesium API进行二次开发属于Web前端开发范畴,目前比较火的Web三剑客包括React.Vue.AngularJS,每个js库的详细介绍可转至官网查看,在此不做详细介绍 ...

  9. cesium 页面截图_Cesium开发入门篇 | 02开发环境搭建及第一个示例

    开发环境准备 利用Cesium API进行二次开发属于Web前端开发范畴,目前比较火的Web三剑客包括React.Vue.AngularJS,每个js库的详细介绍可转至官网查看,在此不做详细介绍.本次 ...

最新文章

  1. HSV RGB颜色空间互转
  2. 99% 人看得懂的“熔断”以及最佳实践
  3. crontab定时执行python脚本_linux下使用crontab定时执行python脚本
  4. C++字符串反转(C++11)
  5. 有符号与无符号数强转的可逆性
  6. 统计并输出某给定字符在给定字符串中出现的次数_查找常用字符
  7. 2016-04-29 二分查找的面试题
  8. vmware workstation克隆linux后修改网卡为eth0方法
  9. java开发工具eli_Java 学习线路图是怎样的?
  10. mysql 建表sysdate_mysql数据库基本操作练习
  11. ajax跨域,json,jsonp
  12. 面向对象-属性查找与绑定方法
  13. 如何在你的Android手机上配置 Python 环境?
  14. ITIL事件管理流程关键知识
  15. 张曦予巴黎时装周儿童单元T台走秀演绎童真风采
  16. 12.10中兴通讯科技园研发大楼发生42岁工程师跳楼事件
  17. STM32笔记20--电容触摸实验/IIC协议
  18. 微信小程序的疫情防控系统
  19. 攻防世界 favorite_number mfw、[BJDCTF2020]ZJCTF,不过如此
  20. 完美解决 Evernote / 印象笔记 的同步失败问题

热门文章

  1. 初学WEB前端的建议,你不看给别人可惜了!
  2. 前端程序员怎么面试找工作?前端面试技巧分享
  3. python把print写入文件_Python中用print方法向文件中写入内容
  4. JS把命令式语句转换为表达式
  5. python处理子进程_Python多处理+子进程问题
  6. 可疑文件_鉴定文件是不是病毒木马的可靠方法 | 免费快速精准
  7. php nowdoc用来做什么,PHP中nowdoc和heredoc使用需要注意的一点
  8. Java中字符输入输出流
  9. HDU-2553N皇后问题(dfs)
  10. 西瓜书《机器学习》线性模型 一元线性回归公式推导