페이지에서 입력한 암호와 데이터베이스에서의 암호 비교
5863 단어 수필.
public BaseReturnInfo androidLogin(@RequestParam String phoneNumber, @RequestParam String pwd) {
BaseReturnInfo baseReturnInfo = new BaseReturnInfo();
UserInfo userInfo = userInfoRepository.getUserByPhoneNumber(phoneNumber);
if (userInfo == null) {
baseReturnInfo.setMsg(" ");
baseReturnInfo.setStatus(1);
return baseReturnInfo;
}
if (pwd != userInfo.getPwd()) {
baseReturnInfo.setMsg(" ");
baseReturnInfo.setStatus(1);
return baseReturnInfo;
}
baseReturnInfo.setMsg(userInfo.getCompanyName());
baseReturnInfo.setStatus(0);
return baseReturnInfo;
}
해결책
public BaseReturnInfo androidLogin(@RequestParam String phoneNumber, @RequestParam String pwd) {
BaseReturnInfo baseReturnInfo = new BaseReturnInfo();
UserInfo userInfo = userInfoRepository.getUserByPhoneNumber(phoneNumber);
if (userInfo == null) {
baseReturnInfo.setMsg(" ");
baseReturnInfo.setStatus(1);
return baseReturnInfo;
}
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();//
// pwd userInfo.getPwd()
boolean glag = bCryptPasswordEncoder.matches(pwd, userInfo.getPwd());//
if(!glag) {
baseReturnInfo.setMsg(" ");
baseReturnInfo.setStatus(1);
return baseReturnInfo;
}
baseReturnInfo.setMsg(userInfo.getCompanyName());
baseReturnInfo.setStatus(0);
return baseReturnInfo;
}
의 원리
BCryptPasswordEncoder의 matches 방법
public boolean matches(CharSequence rawPassword, String encodedPassword) {
if (encodedPassword == null || encodedPassword.length() == 0) {
logger.warn("Empty encoded password");
return false;
}
if (!BCRYPT_PATTERN.matcher(encodedPassword).matches()) {
logger.warn("Encoded password does not look like BCrypt");
return false;
}
return BCrypt.checkpw(rawPassword.toString(), encodedPassword);
}
그리고 원본 코드에 의존해서 문제를 해결한다.
public class BCryptPasswordEncoder implements PasswordEncoder {
private Pattern BCRYPT_PATTERN = Pattern.compile("\\A\\$2a?\\$\\d\\d\\$[./0-9A-Za-z]{53}");
····
}
//
String regex = "\\b\\w{3}\\b";
//
Pattern p = Pattern.compile(regex);
//
Matcher m = p.matcher(s);
//
// find
// public boolean find()
public class BCrypt {}
public static boolean checkpw(String plaintext, String hashed) {
return equalsNoEarlyReturn(hashed, hashpw(plaintext, hashed));
}
참고 문헌
비고
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
피폴라치 수열=>다양한 방법의 비교(분치, 귀속, 동적 기획/추이)이렇게 하면 피폴라치 수열에는 여러 가지 해법이 있을 수 있다. 일반적인 귀속 방법에는 많은 중복 계산이 존재한다.효율은 자연히 매우 낮다.예를 들어 f(n-1)를 계산할 때 이미 f(n-2)를 계산해 냈지만 귀환은...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.