iOS之密码学

一、非对称加密

  - 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和用户的密码进行 hmac 运算,递交给服务器,服务器保存这个值( (KEY+密码)HMAC  ),至此,注册已完成

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

      + 好处:登录的过程中,黑客截获了我们发送的数据,他也只能得到 hmac 加密过后的结果,拿不到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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,671评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,159评论 1 32
  • /**ios常见的几种加密方法: 普通的加密方法是讲密码进行加密后保存到用户偏好设置( [NSUserDefaul...
    彬至睢阳阅读 3,042评论 0 7
  • GET和POST请求 GET和POST请求简介 GET请求模拟登陆 POST请求模拟登陆 GET和POST的对比 ...
    时间不会倒着走阅读 612评论 0 1
  • 电波?声场?磁场?像一大群力量向我们袭来。也许这是一场没有硝烟的战争,却是一场声势浩荡的比赛。没有阻挠,只有团结和...
    Cinko阅读 224评论 0 17