반응형
사용자에게 입력받은 비밀번호가 규칙에 맞는지 체크하기 위한 함수를 알아보겠습니다. 관련 게시글을 꽤 찾아봤는데 실무에서 바로 쓸 정도로 정리된 글은 없는 것 같아 바로 복사해서 적용할 수 있게 정리하겠습니다.
Import
정규식 사용에 필요한 regex의 Pattern과 Matcher
import java.util.regex.Pattern;
import java.util.regex.Matcher;
패스워드 체크 함수
* XSS나 암복호화는 이미 처리된 후 평문으로 서버에서 체크하는 방식입니다.
public String chkPasswd(String passwd, String birth) {
//반복된 문자 확인
Pattern passPattern1 = Pattern.compile("(\\w)\\1\\1\\1");
Matcher passMatcher1 = passPattern1.matcher(passwd);
// 영문 포함 확인
Pattern passPatternEng = Pattern.compile("[a-zA-Z]");
Matcher passMatcherEng = passPatternEng.matcher(passwd);
// 숫자 포함 확인
Pattern passPatternNum = Pattern.compile("[\\d]");
Matcher passMatcherNum = passPatternNum.matcher(passwd);
// 특수문자 포함 확인
Pattern passPatternSign = Pattern.compile("[\\W]");
Matcher passMatcherSign = passPatternSign.matcher(passwd);
boolean includeSign = false;
// 허용된 특수문자
Pattern passPatternPermitSign = Pattern.compile("[~!#$%^*]");
Matcher passMatcherPermitSign = passPatternPermitSign.matcher(passwd);
int cnt = 0;
if (passMatcherEng.find()){
cnt += 1;
}
if (passMatcherNum.find()){
cnt += 1;
}
if (passMatcherSign.find()){
cnt += 1;
includeSign = true;
}
if(passMatcher1.find()){
return "1"; // 3자 이상 같은 문자 사용
}else if(continuousPwd(passwd)){
return "2"; // 3자 이상 연속 문자 사용 체크
}else if(cnt == 1){
return "3"; // 영문, 숫자, 특수기호 하나만 사용 체크
}else if(cnt == 2 && includeSign){
return "4"; // 특수문자 미사용 체크
}else if(birth.indexOf(passwd) > -1){
return "5"; // 패스워드에 생년월일 포함 체크
}else if(cnt == 3 && passwd.length() < 10){
return "6"; // 문자 조합 및 자리수 체크
}else if(cnt == 3 && !passMatcherPermitSign.find()){
return "7"; // 허용된 특수문자만 사용했는지 체크
}else{
return "0"; // 정상
}
}
연속된 문자 사용 체크 함수
연속된 문자 체크를 위해 별도 함수로 추가해줍니다.
public boolean continuousPwd(String pwd) {
int o = 0;
int d = 0;
int p = 0;
int n = 0;
int limit = 3;
for(int i=0; i<pwd.length(); i++) {
char tempVal = pwd.charAt(i);
if(i > 0 && (p = o - tempVal) > -2 && (n = p == d ? n + 1 :0) > limit -3) {
return true;
}
d = p;
o = tempVal;
}
return false;
}
그리드형
'IT > Java' 카테고리의 다른 글
[JAVA] Base64 사용 시 getDecoder() 빨간줄 표시 해결방법: The Method getDecoder() is undefined for the type Base64 (0) | 2022.10.24 |
---|---|
[JAVA] 자바 스트링 한글 깨짐 (String 인코딩 변환 방법) (0) | 2022.05.12 |
[JAVA] 가변인자 (0) | 2022.04.07 |
Cause: java.lang.NumberFormatException : For input string: 해결방법 (0) | 2022.01.12 |
[JAVA] 다양한 형태의 JSON 파일 파싱하기 JSONParser, JSONObject, JSONArray (json.simple, GSON) (4) | 2021.11.30 |
댓글