前言
众所周知,一个网站最重要的就是用户,所以如何保证用户信息的安全性就成了网站最重要的问题之一,而这个问题的关键就是保证用户密码的安全,服务器与客户端交互用户密码的时候,是不能使用明文的,最好通过加密以后再进行交互,同时数据库存储密码时也要保存加密后的密码。前者是为了防止中间服务器转发时拦截获取用户密码,从而泄露用户数据或危害服务器,后者则是为了防止内部人员拖库泄露用户密码。所以密码加密成了非常重要的一个环节。
一般的加密方式
公钥/私钥
现在一般的加密方式无非就是使用公钥/私钥进行加密/解密,来解决两端之间交互时使用明文而被中间服务器获取用户密码的问题。
加密算法
或者直接使用某种加密算法进行加密,在客户端加密后直接与服务器进行交互,并存储在数据库中。
进阶一些的加密方式
密码加盐后加密
给密码加盐算是一种比较常见的加密方式,可以防止中间服务器直接获取到用户的明文密码,但是也可以通过对照彩虹表的方式来获取加盐后的密码,所以在我看来安全性也不算太高。
我的策略
动态盐
在给密码加盐的基础上,我想出了动态盐的加密方式
我选择的加密算法是sha256,sha算法具有理论上不可逆运算的可靠性,不管多少长的密码,在计算后都会变成64个字符
通过对密码使用sha256加密并加盐后,中间服务器解密起来就会变得非常麻烦,而使用了动态盐后,用户每次登录的密码加密密文都会变得不一样,从而导致中间服务器用这次的盐,无法用于下一次登录。
而因为数据库里的盐是动态的,密码是sha256加密的,即使拖库后也无法直接用于登录。
基本思路如下图所示: