登录+加密

加密的几种算法

非对称加密 RSA 公钥 私钥

散列函数 -MD5(32位密钥)-SHA1(40位密钥)  -SHA256(64位密钥) -SHA512(128位密钥)

对称加密 DES  3DES  AES(相对最安全的加密)。等等加密方式

写app的时候,密码在网络上、本地存储,都不可以使用明文,所以需要进行加密

最早使用MD5的方式进行加密,但是目前MD5已经被破解,破解方式是通过大量的数据对比以及散列碰撞,获取大量的数据,其实MD5本身是不可被反序列化的

所以信息安全该如何保证呢?

加盐    (注意:服务器本身不需要知道用户的密码是什么,只需要对比加密后的数据)

-固定盐:有安全隐患,所有人都知道盐是什么,如果员工离职带走了盐,泄漏出去后,所有用户的密码都会被破解

-随机盐:比较安全 ,从服务器获取一个随机盐,保存在本地,通过hmac加密算法,进行加密

随机盐虽然比较安全,但是有安全隐患,假如黑客截获了你的url拿到了数据,他可以模拟请求,一样可以登录进你的账号,这时候我们可以设置一个时效性,通过hmac加密后的数据 拼接 时间 再进行一次md5,就可以了,大致流程如下:

客户端拥有: 密钥(key)、用户名(username)、原始密码(password)

newPassword = MD5 (hmac(password+key) + 时间戳)

服务器端拥有: 密钥(key)、用户名(username)、hmac(password + key)

这时候 有hmac(password + key)了,那么,只需要 在加上时间戳 进行一次MD5加密

然后对比客户端和服务器端的进行MD5的结果是否一致,判断是否登录成功

那么时间戳该怎么获取呢,因为前端获取的本地时间有可能被更改,所以需要从服务器获取时间,或者你使用的哪个时间进行的md5,就把这个时间传递给服务器,让其加密后对比,具体看需求而定

你可能感兴趣的:(登录+加密)