写点什么

用户密码验证函数

用户头像
Z冰红茶
关注
发布于: 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
用户头像

Z冰红茶

关注

还未添加个人签名 2018.09.17 加入

还未添加个人简介

评论

发布
暂无评论
用户密码验证函数