写点什么

架构师训练营作业 -- Week 11

用户头像
吴炳华
关注
发布于: 2020 年 09 月 08 日
架构师训练营作业 -- Week 11

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



package com.example.demo;
import java.util.HashMap;
import java.util.Map;
import org.springframework.security.crypto.bcrypt.BCrypt;
public class BCryptDemo {
// salt 在实际应用中应当以明文形式存储到数据库中,并且与用户一一对应。
private static Map<String, String> userIdSaltMap;
/**
* 此方法验证密码明文<code>password</code>经过加盐BCrypt算法计算后得到的密码哈希值是否与传入的<code>passwordHash</code>一致。
* @param userId
* @param password
* @param passwordHash
* @return 哈希值一致: true, 否则false
*/
boolean checkPW(String userId, String password, String passwordHash) {
String hash = BCrypt.hashpw(password, userIdSaltMap.get(userId));
return passwordHash.equals(hash);
}
public static void main(String[] args) {
BCryptDemo demo = new BCryptDemo();
String johnHash = BCrypt.hashpw("john123", userIdSaltMap.get("john"));
assert(demo.checkPW("john", "john123", johnHash));
}
// initialize salt map
{
userIdSaltMap = new HashMap<>();
userIdSaltMap.put("john", BCrypt.gensalt());
userIdSaltMap.put("smith", BCrypt.gensalt());
}
}



用户头像

吴炳华

关注

还未添加个人签名 2020.04.08 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营作业 -- Week 11