일반 비밀번호가 아닌 정규식
3333 단어 securityjavaregexprogramming
그것이 목표입니다…
다양한 요구 사항에 따라 암호 유효성 검사에 사용되는 여러 정규식 패턴이 있지만 약간 관대하고 동시에 암호의 보안 및 강도를 손상시키지 않는 암호 정책이 있는 경우에는 어떻게 될까요? 이를 달성할 수 있는 특정 정규식 패턴이 있습니다(주의: 이것이 최상의 암호 정책이라고 말하는 것이 아닙니다).
정규식을 살펴보겠습니다.
String regex = "^(((?=.*[a-z])(?=.*[A-Z])(?=.*\\d))|((?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*#?&]))|((?=.*[a-z])(?=.*[A-Z])(?=.*[@$!%*#?&]))|((?=.*[a-z])(?=.*\\d)(?=.*[@$!%*#?&])))(?=\\S+$).{8,}$";
이제 사용 중인 이 정규식을 살펴보겠습니다.
public class PasswordValidationTest {
private Pattern pattern;
@Before
public void setUp() {
String regex = "^(((?=.*[a-z])(?=.*[A-Z])(?=.*\\d))|((?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*#?&]))|((?=.*[a-z])(?=.*[A-Z])(?=.*[@$!%*#?&]))|((?=.*[a-z])(?=.*\\d)(?=.*[@$!%*#?&])))(?=\\S+$).{8,}$";
pattern = Pattern.compile(regex);
}
@Test
public void test_first_valid_password_example() {
//Number, upper case, lower case in no particular order
String password = "13Edlpouhgfdcfvgbqb";
Assert.assertTrue(matchPassword(password));
}
@Test
public void test_second_valid_password_example() {
//Lower case, number, special character in no particular order
String password = "dfgjrwerdvfbghjhgfdxc90@";
Assert.assertTrue(matchPassword(password));
}
@Test
public void test_third_valid_password_example() {
//Upper case, number, lower case in no particular order
String password = "POIIUHGFBGNHUYF2df";
Assert.assertTrue(matchPassword(password));
}
@Test
public void test_fourth_valid_password_example() {
//Upper case, lower case, number, special character in no particular order
String password = "KJSrtyhgh!58E543561#";
Assert.assertTrue(matchPassword(password));
}
@Test
public void test_invalid_password_example() {
String password = "TGsayhtgfdcsxrbfdvc";
Assert.assertFalse(matchPassword(password));
}
//Utility function
private boolean matchPassword(String password) {
Matcher matcher = pattern.matcher(password);
return matcher.matches();
}
}
위의 코드 조각에서 볼 수 있듯이 이 정규식은 조건을 필수로 만들지 않지만 사용자는 이러한 조건 중 3개 이상을 충족하지 않는 암호를 제출할 수 없으며 물론 암호 길이는 8자 미만일 수 없습니다. 네 번째 테스트 사례는 정규 표현식이 네 가지 조합을 모두 포함하는 암호를 허용할 수 있음을 보여주고 마지막 테스트 사례는 잘못된 암호의 경우입니다.
이제 위의 테스트 결과를 보자.
모든 테스트를 통과했으며 이제 약간의 설명이 제공됩니다.
^
줄의 시작 부분에 위치 주장(?=.*[a-z])
소문자가 한 번 이상 나타나야 합니다.(?=.*[A-Z])
대문자가 한 번 이상 나타나야 합니다.(?=.*\\d)
숫자가 한 번 이상 발생해야 합니다.(?=.*[@$!%*#?&])
특수 문자가 한 번 이상 발생해야 합니다.(?=\S+$)
전체 문자열에 공백이 허용되지 않는지 확인.{8,}
최소 8자 이상이어야 합니다.$
행의 끝에서 위치 주장또한 OR 조건에 해당하는 대체 기호(|)로 구분된 정규식에는 4개의 조합 그룹이 있습니다. 조건부 시행을 하는 것입니다. 나는 이것이 누군가에게 도움이되기를 바랍니다.
읽어 주셔서 감사합니다! 관찰한 사항이 있으면 의견 섹션에서 의견을 공유해 주십시오. 또는 를 통해 저에게 연락할 수도 있습니다.
Reference
이 문제에 관하여(일반 비밀번호가 아닌 정규식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mayorjay/not-a-regular-password-regex-4gjj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)