본문 바로가기
마구니 패치 노트

비밀번호 해싱MD5 > sha256 문제 해결

by 손건호 2023. 5. 19.

이전의 비밀번호 암호화 글

https://pushvalue.tistory.com/42

 

pw 암호화(md5)후 DB에 저장하기

내 프로잭트의 비밀번호 저장 기능은 유저가 입력한 비밀번호 그대로 DB에 저장 된다 이렇게 되면 비밀번호가 노출될 위험이 있다 비밀번호가 그대로 저장되지않고 비밀번호의 해시값을 저장

pushvalue.tistory.com

 

 

테스트 코드를 만들면서
테스트코드 전용 데이터베이스가 필요했다
spring boot 에서 내장 데이터베이스를 지원 하기때문에
h2 데이터 베이스를 mysql 모드로 사용 하여
mysql 쿼리문도 연동 되도록 계획 했다

하지만 쿼리문이 완벽하게 연동 되지는 않았다

MD5 해시 함수와 sysdate 함수가 호환 되지 않았다

 

 

 

하는김에 sha256 으로 해싱하고 CURRENT_TIMESTAMP 으로 날짜를 뽑았다

 

하지만 해싱 함수를 변경하자마자 로그인이 안되는 문제가 생겼다

원인은 sha256의 해시값이 MD5의 해시값보다 문자열 길이가 길어서

기존에는 45바이트로 커버가 가능했지만
sha256은 해시값의 뒤를 잘라먹게 되었다

 

회원가입은 비밀번호의 해싱값을 저장한다

로그인은 비밀번호의 해싱값을 저장된 해싱값과 비교한다
해싱값이 저장되는 순간 일부만 저장 되어 전혀 다른 데이터가 되어 버렸고
비교,대조 값이 다르기 때문에 로그인 기능은 무조건 비밀번호를 잘못 입력했다고 판단 한 것이다

유저 비밀번호 컬럼의 속성을 45 바이트 에서 128 바이트로 수정 해주고 해당 문제를 해결 했다

 

ALTER TABLE `LFGservice`.`lfg_user` 
CHANGE COLUMN `user_pw` `user_pw` VARCHAR(12) NOT NULL ;

댓글