架构师训练营第十一周作业
发布于: 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")); }}
划线
评论
复制
发布于: 2020 年 08 月 24 日阅读数: 51

CATTY
关注
还未添加个人签名 2019.12.29 加入
还未添加个人简介
评论