用户密码验证函数
发布于: 2020 年 08 月 26 日
请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文)返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。
用户+密码+salt组合,使用md5单向加密
public class LoginCheckUtils { private final static String ENCRYPT_MD5 = "MD5"; private final static String ENCRYPT_SALT = "滴答滴"; /** * 检查用户密码 * @param userName * @param password * @param cryptograph * @return */ public static Boolean checkPW(String userName, String password, String cryptograph){ // 根据用户名密码加密,然后跟密文对比 String encrypted = encrypt(userName+password); return encrypted.equals(cryptograph); } /** * 加密 * @param txt * @return */ public static String encrypt(String txt){ return encrypt(txt, "MD5"); } /** * 加密 * @param txt * @return */ public static String encrypt(String txt, String type){ if(type == null || "".equals(type.trim())){ type = ENCRYPT_MD5; } // 带盐加密 if(ENCRYPT_MD5.equals(type)){ return Hashing.md5() .newHasher() .putString(ENCRYPT_SALT+txt, Charsets.UTF_8) .hash() .toString(); }else{ throw new IllegalArgumentException("不支持的加密方式"); } }}
测试用例
正常、密文异常、用户异常、密码异常
public class LoginCheckUtilsTest { String userName = "小阿飞"; String password = "password"; String cryptograph = ""; @Before public void before(){ cryptograph = LoginCheckUtils.encrypt(userName+password); } /** * 正常 */ @Test public void normalCheckPW() { Assert.assertTrue(LoginCheckUtils.checkPW(userName, password, cryptograph)); } /** * 密文异常 */ @Test public void cryptographExcept(){ Assert.assertFalse(LoginCheckUtils.checkPW(userName, password, "xxoo")); } /** * 用户或密码错误 */ @Test public void userOrPasswordExcept(){ Assert.assertFalse(LoginCheckUtils.checkPW("", password, cryptograph)); Assert.assertFalse(LoginCheckUtils.checkPW(userName, "", cryptograph)); }}
测试结果
划线
评论
复制
发布于: 2020 年 08 月 26 日阅读数: 53
版权声明: 本文为 InfoQ 作者【Z冰红茶】的原创文章。
原文链接:【http://xie.infoq.cn/article/9c6821782820b81b14bebd888】。未经作者许可,禁止转载。
Z冰红茶
关注
还未添加个人签名 2018.09.17 加入
还未添加个人简介
评论