반응형
자바스크립트에서 임시 비밀번호를 생성하고, Java를 통해서 DB에 저장하는 로직을 만들었다.
임시 비밀번호를 보관하기 위해선 암호화를 해주는 게 좋다. 단, 복호화가 되지 않는 단방향 해시 방식을 사용해줘야한다.
1️⃣ BCrypt
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; public class PasswordEncryptor { // BCryptPasswordEncoder는 thread-safe 하므로 static으로 공유 사용 가능 private static final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); /** * 평문 비밀번호를 BCrypt 방식으로 암호화합니다. * * @param plainPassword 암호화할 평문 비밀번호 * @return 암호화된 비밀번호 (해시 값) */ public static String encrypt(String plainPassword) { return encoder.encode(plainPassword); } /** * 입력한 평문 비밀번호와 저장된 암호화 비밀번호를 비교합니다. * * @param plainPassword 사용자가 입력한 평문 비밀번호 * @param encryptedPassword DB에 저장된 암호화된 비밀번호 * @return 일치 여부 (true: 일치, false: 불일치) */ public static boolean matches(String plainPassword, String encryptedPassword) { return encoder.matches(plainPassword, encryptedPassword); } }
임시 비밀번호를 BCrypt 방식으로 암호화했다.
BCryptPasswordEncoder의 경우 내부적으로 salt를 사용하여 사용자 입력값 + 무작위 salt → 해시값 형태로 암호화하고 그 결과를 저장한다.
때문에 같은 값을 암호화 해도 매번 다른값이 저장되며, 검증이 필요할 경우에 matches() 를 사용하면 된다.
2️⃣ SHA-256 기반 PasswordEncryptor
import hwf.cmm.encrypt.EncryptUtils; public class PasswordEncryptor { // EncryptUtils는 SHA-256 암호화를 제공하는 유틸 클래스 private static final EncryptUtils utils = new EncryptUtils(); /** * 평문 비밀번호를 SHA-256 방식으로 암호화합니다. * * @param plainPassword 암호화할 평문 비밀번호 * @return 암호화된 비밀번호 (해시 값) */ public static String encrypt(String plainPassword) { try { return utils.encryptBySha256(plainPassword); } catch (Exception e) { throw new RuntimeException("암호화 실패", e); } } /** * 입력한 평문 비밀번호와 저장된 암호화 비밀번호를 비교합니다. * * @param plainPassword 사용자가 입력한 평문 비밀번호 * @param encryptedPassword DB에 저장된 암호화된 비밀번호 * @return 일치 여부 (true: 일치, false: 불일치) */ public static boolean matches(String plainPassword, String encryptedPassword) { try { return utils.encryptBySha256(plainPassword).equals(encryptedPassword); } catch (Exception e) { throw new RuntimeException("비밀번호 비교 실패", e); } } }
EntryptUtils 는 양방향 암호화를 제공하지만 SHA-256은 단방향 해시 함수이기에 위처럼 복호화가 불가능한 암호화를 할 수 있다.
js 무작위 임시 비밀번호 생성하기 (대문자, 소문자, 숫자, 특수문자)
금일 회사에서 임시 비밀번호가 필요한 로직을 만들었다.추후에 도우이 될 것 같아서 간단하게 len 길이만큼 무작위로 대문자, 소문자, 숫자, 특수문자가 들어간 임시 비밀번호를 생성하는 로직
sookr5416.tistory.com
반응형
'개발 & 데이터베이스 > JAVA' 카테고리의 다른 글
Toast grid 트리 구조 만드는 방법 (0) | 2025.03.31 |
---|---|
MyBatis 동적 쿼리 if문 문법 정리 (0) | 2024.05.28 |
자료구조 데크 deque (0) | 2024.02.21 |
JAVA 자바 정규표현식으로 주민등록번호, 이메일 유효성 검사하기 (Pattern, Matcher) (0) | 2023.08.09 |
IntelliJ IDE 다운로드 방법 및 프로젝트 생성하기 (0) | 2023.07.24 |