728x90
반응형
MD5 해시코드 비밀번호 암호화 로직 -> 객체화 클래스 구현 로직
public class PwdChange{
public static String getPassWordToXEMD5String(String password) {
MessageDigest md_Md5 = null;
try {
md_Md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
e.printStackTrace();
}
String resultString;
byte[] byteArr;
String temp = "";
byteArr = md_Md5.digest(password.getBytes());
for (int i = 0; i < byteArr.length; i++) {
resultString = "" + Integer.toHexString((int)byteArr[i] & 0x000000ff);
//바이트 배열원소값 + 16진수코드를 연결
if( resultString.length() < 2 ) {
resultString = "0" + resultString;
}
temp = temp + resultString;
}
return temp;
}
}
다른 클래스에서 암호화를 진행할때
PwdChange.getPassWordToXEMD5String(암호화 할 비밀번호);
클래스를 통해 지정된 메서드에 암호값을 넣어 암호화 시켜 줍니다.
로그인 자체는 애초에 회원가입할때 저장되는 암호키와 로그인을 시도할때 입력한 비밀번호를 똑같은 형태로 암호화하
여 암호화된 두 값을 비교하여 일치하면 로그인을 성공시켜 줍니다.
따라서 회원가입할때 입력받는 비밀번호를 DB에 저장할때 미리 암호화를거쳐 암호화된 비밀번호를 DB에 저장하게되며
m.setMem_pwd(PwdChange.getPassWordToXEMD5String(m.getMem_pwd()));
this.memberService.insertMember(m);
회원 가입시의 암호화 과정은 Service단에서 DAO로 완벽히 저장되기 전 중간 사이에서 처리합니다.
로그인할때 입력받을 비밀번호를 다시한번 암호화하여 암호화 된것끼리 비교하여 유효성을 검증합니다
if(!m.getMem_pwd().equals(PwdChange.getPassWordToXEMD5String(login_pwd))) {
로그인 할 때의 유효성검증은 서비스가 아닌 컨트롤러에서 암호화를 해야합니다.
회원을 수정하거나
m.setMem_pwd(PwdChange.getPassWordToXEMD5String(m.getMem_pwd()));
this.memberService.updateMember(m);
MemberVO db_pwd = this.memberService.getMember(id);//오라클로부터 암호화된 비밀번호 가져오기.
if(!db_pwd.getMem_pwd().equals(del_pwd)) {//m.getMem_pwd() (X) => db_pwd.getMem_pwd() (O)
탈퇴할 때에도 비밀번호가 필요하겠죠
로그인 뿐만아니라, 게시글에서도 마찬가지입니다.
게시글을 작성할때 비밀번호를 입력받고 입력받은 비밀번호를 암호화 한 뒤에 DB에 저장해준 후,
해당 게시글을 수정을 한다거나 게시글을 삭제를 할 때에도 똑같이 게시글에 대한 비밀번호를 다시 입력받고 입력받은
BoardVO db_pwd= this.boardService.getBoardCont(eb.getBoard_no());
//게시물 번호를 기준으로 디비로부터 비밀번호를 가져옴.
if(!db_pwd.getBoard_pwd().equals(eb.getBoard_pwd())) {
//기존 저장되있던 게시물의 비밀번호와 새로 입력한 비밀번호가 같을때
BoardVO db_pwd=this.boardService.getBoardCont(board_no);
if(!db_pwd.getBoard_pwd().equals(del_pwd)) {
비밀번호를 암호화 한 뒤 DB로부터 암호화되어 저장된 비밀번호와 비교를하여 유효성검증을 실행합니다.
만약 비밀번호를 잊게된다면, 비밀번호를 재발행 해줘야 합니다.
이때에도 난수와 함께 암호화 코드를 사용합니다.
Random r = new Random();//java.util의 random클래스로 난수를 발생시킨다.
int pwd_random = r.nextInt(1000000);//0이상 백만이하의 임의의 정수숫자 난수를 발생
String ran_pwd=Integer.toString(pwd_random);//임시 정수비번을 문자열로 변경 (임시비번 암호화)
m.setMem_pwd(PwdChange.getPassWordToXEMD5String(ran_pwd));//임시비번 암호화
this.memberService.updatePwd(m);//암호화된 임시비번으로 수정
fm.addAttribute("ran_pwd",ran_pwd);
728x90
반응형
'SpringFramework > BASIC' 카테고리의 다른 글
[ BCrypt ] Spring-security 비밀번호 암호화, 복호화 로직 활용 (0) | 2020.09.09 |
---|---|
[ SHA-256 해시코드 ] 비밀번호 암호화 로직 (0) | 2020.09.09 |
[DELETE] 요청 POST방식/ (GET방식 불가) (0) | 2020.09.05 |
[ @ParhVariable ] 어노테이션을 통한 uri path로 파라미터를 처리하는 방법 (0) | 2020.09.05 |
[JunitTest 2] @Runwith, @ContextConfiguration / 데이터 조회 및 삭제기능 Test (0) | 2020.09.04 |