用户注册及登录的密码加密、token、salt的简单说明及处理

查询sys_user表时,发现有一列salt的字段,对用户用户注册及登录的密码加密、token、salt进行简单说明及记录。

用户注册及登录的密码加密、token、salt的简单说明及处理

salt简介

我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码**网站),得到某用户的密码。

加Salt可以一定程度上解决这一问题。所谓加Salt方法,就是加点“佐料”。其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,再比较散列值,已确定密码是否正确。
  这里的“佐料”被称作“Salt值”,这个值是由系统随机生成的,并且只有系统知道。这样,即便两个用户使用了同一个密码,由于系统为它们生成的salt值不同,他们的散列值也是不同的。即便黑客可以通过自己的密码和自己生成的散列值来找具有特定密码的用户,但这个几率太小了(密码和salt值都得和黑客使用的一样才行)。

代码举例

使用String salt = RandomStringUtils.randomAlphanumeric(20);
将随机数set到entity中随后使用Sha256加密,将password以及salt set到password中,进行入库
用户注册及登录的密码加密、token、salt的简单说明及处理

token简介

token的简要作用,当用户登陆后,在服务器端会生成一段随机字符串存储到数据库,或者是redis中,之后将这段字符创返回给用户端,并存入到用户的Cookie中,之后用户发送的任何请求,都需要携带cookie进行访问,在服务器端收到请求后,会与先前生成的token进行对比,如果token一致,则放行请求。

代码举例

实体类:用户注册及登录的密码加密、token、salt的简单说明及处理
service层代码:
用户注册及登录的密码加密、token、salt的简单说明及处理
TokenGenerator代码:
用户注册及登录的密码加密、token、salt的简单说明及处理