IT

python(파이썬) 비밀번호 검사 정규식

볼통통알파카 2022. 9. 26. 21:12
반응형

패스워드 생성 시 설정 정규식에 맞춰 검사하는 코드 예시다.

2000년대 초반까지 비밀번호 저장하는 방식은 입력하면 그대로 DB에 반영되었다.

현재는 복잡도와 길이를 검증하여 승인 처리를 해야 한다.

 

회원가입 코드 예시
from flask import request, redirect
from Models import User
from Models import db
import re

@app.route('/register', methods=['POST'])

def register():
   userid = request.form.get('userid')
   password = request.form.get('password')
   confirm_password = request.form.get('confirm_password')
   if password != confirm_password:
      return make_response("비밀번호가 일치하지 않습니다.", 200) 
 
   if not check_password(password):
      return make_response("비밀번호 조합규칙에 맞지 않습니다.", 200) 
   else:
      usertable=User() 
      usertable.userid = userid
      usertable.password = password
 
db.session.add(usertable)
db.session.commit()
return make_response("회원가입 성공", 200) 

def check_password(password):
 # 2종 이상 문자로 구성된 8자리 이상 비밀번호 검사 정규식
   PT1 = re.compile('^(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d!@#$%^&*]{8,}$')
   PT2 = re.compile('^(?=.*[A-Z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$')
   PT3 = re.compile('^(?=.*[A-Z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$')
   PT4 = re.compile('^(?=.*[a-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,}$')
   PT5 = re.compile('^(?=.*[a-z])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$')
   PT6 = re.compile('^(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$')

 # 문자 구성 상관없이 10자리 이상 비밀번호 검사 정규식
   PT7 = re.compile('^[A-Za-z\d!@#$%^&*]{10,}$')

   for pattern in [PT1, PT2, PT3, PT4, PT5, PT6, PT7]:
      if pattern.match(password):
         return True
   return False

함수를 2개를 만들었다. register함수와 check_password함수.

아래 함수는 정규식을 적용하여 비밀번호 체크하는 함수.

위 함수는 정규식을 호출해서 맞으면 DB로 update, 틀리면 등록하지 않도록 하는 함수다.

 

보통 SQL과 기타 언어에서 사용하는 정규식이므로 확인하여 활용하면 좋을 것 같다.

반응형