前言:
依旧是可以说很良心了,今天了解了一下加密,才发现其中内容真的多,涉及具体的需求
一般常用MD5
,再进一步就是加盐
,再进一步就是乱序
,再再进一步就是HMAC
@非对称加密算法
RSA - 加密算法
- 公钥加密-私钥解密
- 私钥加密-公钥加密
- KEY-其实就是一个数字
- 只能通过因式分解破解
哈希(散列)函数
- MD5
- SHA1
- SHA256/512
@对称加密算法
- DES
- 3DES
- AES
(高级密码标准,美国国家安全局使用,iOS操作系统内部使用)
散列函数-特点
- 算法公开
- 对相同数据加密,得到的结果是一样的
- 对于不同的数据加密,得到的结果都是定长的
(32位字符a--z,0--9)
- 信息摘要--信息指纹,用来做识别
- 不能反算!
散列函数-用途
- 用户登录 : 服务器里存储的是
加密后的密码
,并不是明文密码
,用户登录时,我们客户端也只是发送加密后的识别码
。 - 搜索
- 版权
散列函数-破解
- 目前破解的散列只有 MD5,SHA1 也在边缘
- 散列碰撞,不同的数据使用MD5之后,能够得到相同结果的散列结果,这个网站,目前95%的正确查找率
Example->MD5& HMAC
MD5加盐[加入一段复杂且长的特殊字符串,使得MD5暴力破解数据库无法匹配]
- 缺点-->盐是写死在程序里的,被认为掌握,存在泄漏的危险
HMAC[另类加盐]
- 优点-->给定一个密钥
[一般从服务器获取,在注册时存储到服务器本地、客户端本地,客户端仅获取一次,这样减小了key被拦截的机率]
,对明文进行加密,并做两次散列--32位字符
,这样的好处是,服务器随机给,客户端仅获取一次,所有的开发人员都不知道,不存在认为泄漏的潜在危险,也大大降低了被拦截的可能。 - 缺点-->如果用户更换设备登录,那么该设备上是不具备对应的密钥的,此时用户便不能再登录了。所以,服务器端应该更换普通的账户保存方式
[账号:密钥:加密之后的密码->(原始密码+KEY)HMAC<-]
HMAC客户端登录思路
- 1.1 用户输入账号、密码
- 1.2 本地查找密钥
[如果没有密钥,向服务器获取(对应账号)]
- 1.3 举例:QQ的设备锁
(异地登陆)
,通过判断本地是否有密钥,进而判断是否为用户的设备,如果判断不是用户设备,则向之前有密钥的手机客户端发送是否解锁的信息,解锁后,服务器则向你发送新的密钥。
使得HMAC更进一步的安全[登录时]
- 客户端:
加密之后的密码 == (原始密码 + KEY)HMAC
,再进一步做处理,最终向服务器发送的密码 == (加密之后的密码 + 201807021620)MD5
- 服务器端:这时的判断进一步做更改,
(加密之后的密码 + 201807021621)
||(加密之后的密码 + 201807021620)
,使得只有1分钟的时效
钥匙串访问
1> 苹果的生态圈,从
iOS7.0.3版本
,开放给开发者
2> 钥匙串加密方式是AES加密
,可以将保存的密码以明文的方式反算
给你
3> 苹果原生的接口,都是C语言
的
网友评论