架构师培训 -11 安全、高可用

用户头像
刘敏
关注
发布于: 2020 年 08 月 26 日

1.写一个密码验证方法

请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文)返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。



用户密码通常是密码加上盐经过不可逆算法加密存储在数据库中,加密保证了即使用户信息即使被泄露了也不会暴露密码,加盐保证了密码不会被密码字典进行破解。



密码验证过程:

1、数据库中存储的密码 = md5(sha1(密码明文)+盐 )

2、前端传过来的密码 = sha1(密码明文)

3、通过当前登陆用户获取数据库中用户的加密盐和加密密码。

4、通过秘钥解密获得明文盐 =ASE.decrypt(加密盐)

5、判断 md5(前端传过来的密码+盐) 是不是 与数据库中的加密码一致,一致就验证通过,否则验证失败。



问题:题中提供的方法中出现了密码明文,这个不太能理解,在整个后端代码处理过程中应该都不会有密码明文出现才对。(欢迎指正)



public boolean checkPW(String userId,String encryptPw) {

UserInfo userInfo = userService.getById(userId);

if(userInfo == null) {

return false;

}

String slat = SecurityUtils.aseDecode(userInfo.getSlat());

String withSlatPw= SecurityUtils.md5Encode(encryptPw,slat);

if(withSlatPw.equals(userInfo.getPw)) {

return true;

}

return false;

}



用户头像

刘敏

关注

还未添加个人签名 2018.04.25 加入

还未添加个人简介

评论

发布
暂无评论
架构师培训 -11 安全、高可用