关于登陆时安全性的猜想

我之前接触到的App登陆会将密码按照固定的格式加盐做MD5后向服务器发送请求,服务器收到后直接比对数据库中是否有匹配的MD5值来确定是否登陆成功,但这本质上和没加密没有任何区别,假定我们的请求为http请求 ,当黑客抓包得到这个md5做reply时,依然可以验证成功,所以这么做并不安全。

是否可以加上时间戳?

答案是:如果采用MD5这种不可逆算法,加上时间戳后MD5值和之前的就完全不一样,这样不行。
那么就只能采用一个能加密和解密的方式,来让服务器获取到时间戳,来判断是否为reply,这里有两种方案的猜想,一种是双钥(双钥体系)体系,一种是单钥体系。

采用双钥体系

如果采用双钥体系,我们可以采用RSA,客户端服务器都有自己的公钥私钥,客户端发送密码时可以先将密码+时间戳用自己的私钥加密(认证)再用服务器端的公钥加密(保证密钥再传输信道上安全)后发送给服务器,服务器先用自己的私钥解密后再拿用户的公钥解密。解密后得到的明文有密码和时间戳,时间戳在一定范围内被认为是合法的。

采用单钥体系

在开发时事先和后台沟通好密钥的生成规则。之后将密码加盐的MD5和时间戳一起用沟通好的密钥加密,这里用DES或者AES都可以。服务器端接收到密码后用密钥解密,得到密码加盐的MD5和时间戳,时间戳在一定范围内被认为是合法时,拿MD5到数据库做验证。

你可能感兴趣的:(关于登陆时安全性的猜想)