架构师培训 -11 安全、高可用
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;
}
评论