写点什么

架构师训练营第十一周作业

用户头像
CATTY
关注
发布于: 2020 年 08 月 24 日
架构师训练营第十一周作业

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



public interface IHasher {
String hash(String source);
}



import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Objects;
import org.apache.commons.codec.binary.Hex;
/**
* 基于md5的hash
*/
public class MD5Hasher implements IHasher {
@Override
public String hash(String source) {
source = Objects.requireNonNull(source);
try {
MessageDigest md5 = MessageDigest.getInstance("md5");
return Hex.encodeHexString(md5.digest(source.getBytes(StandardCharsets.UTF_8)));
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
}



public interface IPasswordChecker {
boolean checkPW(String userId, String password, String encryptPassword);
}



/**
* 简单的密码检查
*/
public class SimplePasswordChecker implements IPasswordChecker {
private final IHasher hasher;
public SimplePasswordChecker(IHasher hasher) {
this.hasher = hasher;
}
@Override
public boolean checkPW(String userId, String password, String encryptPassword) {
String hash = hasher.hash("simple_" + userId + "_" + password + "_" + getUserSalt(userId));
// System.out.println(hash);
return hash.equals(encryptPassword);
}
/**
* 根据用户id返回特定的salt,这里为了简化,直接返回某个固定的值
* @param userId
* @return
*/
protected String getUserSalt(String userId) {
return "TODO";
}
}



public class Main {
public static void main(String[] args) {
IPasswordChecker checker = new SimplePasswordChecker(new MD5Hasher());
System.out.println(checker.checkPW("user", "password", "a16c6d10c839e8e0e3141f654e008aa4"));
}
}



用户头像

CATTY

关注

还未添加个人签名 2019.12.29 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第十一周作业