iOS 开发密码学

  • 哈希(散列函数)算法
  • 对称加密算法
  • 非对称加密算法

哈希(散列函数)算法

算法公开
对不同数据加密结果是定长的32位字符(所能表示的个数是有限的)
信息摘要(加密之后的数据是不可逆的)

哈希的**: 散列碰撞(就是找出两个不同的数据, 加密之后得到相同的结果)
比方说: 用户隐私数据!! 绝对不允许明文传递(需要加密——哈希算法)
服务器是不知道用户的真实密码!!!—找回密码
网络传输数据 —- 登录!! (用户密码)

iOS开发中加密方式
1. 进行加密处理: MD5直接加密
2. 加盐处理: — 早期的使用 (密码+ 盐).md5 盐: 固定写死的!!! 写死在程序里边, 一旦盐显露, 就不安全了
3. HMAC: 用一个**加密, 然后做两次散列(hmacMD5StringWithKey:)在实际开发中, 这个key是**, 这个**是从服务器获取的
iOS 开发密码学
iOS 开发密码学

代表算法
1. MD5(信息’指纹’) : 一般用来做密码加密!!!
版权问题!!MD5值!!
搜索引擎
百度云&360云盘->秒传!!! 服务器上只要有这个文件, 那么用户可以实现秒传
2. SHA 512/256
3. HMAC


  • 对称加密算法和非对称加密都是可逆的
  • 可逆: 明文->加密->密文
    密文->解密->明文

对称加密算法 - 传统加密算法

  • 加密和解密使用同一个**
  • **的保密工作非常重要

经典算法
DES : 数据加密标准(用的少, 因为强度不够)
3DES: 使用3个**, 对相同的数据执行三次加密, 强度增强(更加用的少)
AES: 高级密码标准

对称加密的两种方式: ECB & CBC

  • ECB:电子代码本, 就是说每一个数据块都是独立加密的
    将一个大的数据块拆分成若干个数据包, 依次加密然后进行拼接, 依次解密, 然后在拼接
  • CBC(相对安全):密码块链, 使用一个**和一个初始化向量(IV)对数据执行加密转换; 如果在传输数据的过程中, 一个数据块被破坏了, 那么整个数据都没法解密了

CCCrypt函数: 对称加密算法那的核心函数(加密, 解密)

  • KCCEncrypt 加密/KCCDecrypt解密
  • 加密算法, 默认使用的是AES
  • 加密方式: ECB / CBC
  • 加***
  • **长度
  • iv 初始向量, ECB不需要指定
  • 加密的数据
  • 加密数据的长度
  • 密文缓冲区地址
  • 密文缓冲区大小
  • 加密结果的大小

非对称加密算法(RSA)- 现代加密算法(加密效率非常低)

  • 公钥和私钥
  • 使用公钥加密, 私钥解密
  • 使用私钥加密, 公钥解密

iOS 开发密码学