加密的几种算法
非对称加密 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,就把这个时间传递给服务器,让其加密后对比,具体看需求而定