개발 & 데이터베이스/JAVA

Java 임시 비밀번호 암호화하는 방법 (단방향 해시 방식)

K.두부 2025. 4. 17. 14:59
반응형

자바스크립트에서 임시 비밀번호를 생성하고, 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

 

반응형