iOS 开发密码学
- 哈希(散列函数)算法
- 对称加密算法
- 非对称加密算法
哈希(散列函数)算法
算法公开
对不同数据加密结果是定长的32位字符(所能表示的个数是有限的)
信息摘要(加密之后的数据是不可逆的)
哈希的**: 散列碰撞(就是找出两个不同的数据, 加密之后得到相同的结果)
比方说: 用户隐私数据!! 绝对不允许明文传递(需要加密——哈希算法)
服务器是不知道用户的真实密码!!!—找回密码
网络传输数据 —- 登录!! (用户密码)
iOS开发中加密方式
1. 进行加密处理: MD5直接加密
2. 加盐处理: — 早期的使用 (密码+ 盐).md5
盐: 固定写死的!!! 写死在程序里边, 一旦盐显露, 就不安全了
3. HMAC: 用一个**加密, 然后做两次散列(hmacMD5StringWithKey:)
在实际开发中, 这个key是**, 这个**是从服务器获取的
代表算法
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)- 现代加密算法(加密效率非常低)
- 公钥和私钥
- 使用公钥加密, 私钥解密
- 使用私钥加密, 公钥解密