原则:
1、不允许在网络上传递明文的用户隐私信息
2、在本地不允许明文的保存用户隐私信息
起初应用于军事领域,然后凯撒大帝,后面密码本加密
a-c,b-e,c-zz 持续到了上世纪50年代
RSA(三个人名)
- 加密算法公开
- 公钥加密,私钥解密
- 公钥解密吗,私钥加密
key:其实就是一个数字,只能通过公示分解破解 (破解的话需要50年左右)
AF
哈希(散列)函数
MD5
SHA1
SHA256
对称加密算法
DES
3DES
AES(高级密码标准,美国国家安全局使用的) iOS操作系统内部使用的 破解需要几千万年
散列函数特点
- 算法公开
- 对相同的数据加密,得到的结果是一样的
- 对不同的数据加密,得到的结果是定长的,32位字符(a-z 0-9)
- 信息摘要,信息“指纹”,是用来做识别的
- 不能反算
用途
- 密码,服务器其实也不知道用户的真实密码
- 搜索
- 版权
破解
- 目前破解的散列只有MD5,SHA1也在边缘
- 散列碰撞,不同的数据,使用MD5之后能够得到相同的散列结果无数种
- 张小云
MD5的基础安全
1、加“盐”-- 早期解决方案, 足够长/复杂的字符串
缺点:盐是固定的,写死在程序里面的
2、HMAC -- 近几年在国内开始增多
给定一个密钥!对明文进行加密,并且做了“两次散列”。32位字符
密钥一般从服务器获取
服务器
a、账号、密钥、加密后的密码
b、(加密之后的密码+“201701112205”).MD5 时间限制
HMAC客户端登录思路
a、用户输入账号、密码
b、本地查找密钥:如果没有密钥,向服务器获取(账号对应的密钥)
本地:
账号:NSUserDefault
密码:钥匙串访问keyChain
参数:
1、密码明文
2、forService服务:就是APP的唯一标识,一般使用BoundID或加密后的BoundID
3、账号
1、苹果的“原生态圈”,从iOS7.0.3版本,开放给开发者
2、钥匙串加密方式就是AES加密,可以将保存的密码以明文的方式反算给你
3、苹果原生的接口都是C语言,但有三方库,很方便