NutzCN Logo
问答 我现在正在学习论坛代码nutzwk2.0,加密认证遇到一些问题,那个大侠给解决一下
发布于 2940天前 作者 zozoh44 1701 次浏览 复制 上一个帖子 下一个帖子
标签:

每次相同的字符串加密得到的编码,都不一样,想不到怎么去认证,代码看的有点乱,哪位大侠给解释一下,到底是怎么认证的呢,

19 回复

先定义几个值

  1. password 明文密码
  2. password_encoded 加密hash过的密码
  3. salt 盐,每个用户账户都不一样, 避免一个用户密码泄密导致整个库都破解

数据库里面存储: password_encoded和salt , 注意 password_encoded不是原本的明文

password_encoded=sha1(password+salt)

登陆流程:
1. 传入参数 username password
2. 根据username取出salt, 用户不存在,根据系统安全级别,返回 "用户名不存在" 或 "用户名/密码错误"
3. 根据上述公式得出password_encoded, 与数据库中的password_encoded(字段名一般沿用password,但绝非明文)进行对比
4. 符合,登陆成功, 不符合,返回"用户名/密码错误"

@wendal
大神你看看,我哪里错了,怎么密码是一样,不相等呢

@At("/okPwd")
@Ok("json")
@RequiresPermissions("sys:user")
public boolean okPwd(@Param("..") SysUser user) {

       String userId =user.getId();       
       String password = user.getPassword();
       SysUser uu = userService.fetch(Cnd.where("id", "=", userId));
       String salt = uu.getSalt();
       String hashedPasswordBase64 = new Sha256Hash(password, salt, 1024).toBase64();
       String pwd=uu.getPassword();
       if(pwd== hashedPasswordBase64)
         return true;
       else
         return false;
}

@qq_88adaffc 默认密码都是123456吧

@wendal 不是,自己随便设的 aa

       为什么这样不能验证呀

@wendal 另外,为啥字符串对比用等号了

@wendal @wendal 大神你帮我看看上面那段代码拿错了吧

@qq_88adaffc 那你说密码都一样是啥意思

@wendal 等号不行吗? 我进调试,看到两个的值也不同

@wendal 一个是从数据库取过来的,一个是页面获得的

字符串对比不能用等号啊

数据库取出来是password_encoded, 页面获取的password, 当然不可能一样

经过Sha256Hash之后才能对比

@wendal 对呀,但是我现在从页面获取的字符串经过Sha256Hash之后再与数据库的密码对比的,上面有代码,大神你看看是哪里写错了吗???

如果你确定密码输入正确,那么就是数据库里面的值生成错了

代码

@At("/okPwd")
@Ok("json")
@RequiresPermissions("sys:user")
public boolean okPwd(@Param("..") SysUser user) {
//页面获取用户ID
String userId =user.getId();
//页面获取用户输入的密码
String password = user.getPassword();
//查询数据库用户
SysUser uu = userService.fetch(Cnd.where("id", "=", userId));
//获得数据库用户加密用盐
String salt = uu.getSalt();
//获取数据库用户密码
String pwd=uu.getPassword();
//将页面获取密码加盐加密
String hashedPasswordBase64 = new Sha256Hash(password, salt, 1024).toBase64();
对比页面密码与数据库密码是否相等
if(pwd== hashedPasswordBase64)
return true;
else
return false;
}

同一个password和salt,在相同配置下,sha256能得出一样的hash值

@wendal 但是可以 登录呀, 只是我想在页面 修改密码, 之前先验证密码,

@wendal 我也是这么做的,但是生成的不一样呀,弄一天了。。。愁呀

逻辑好乱

那你这方法到底是啥功能? 验证老密码的?

@wendal 对对,修改密码之前,先输入旧密码,就像修改QQ密码时一样

添加回复
请先登陆
回到顶部