반응형

 

Jasypt  소개

 

Jasypt(Java Simplified Encryption)는 자바 언어용으로 설계된 간단한 암호화 도구입니다.

이 도구는 주로 개발자가 데이터를 보호하고 보안을 강화하기 위해 사용됩니다.

Jasypt는 다양한 암호화 기술을 제공하며, 주로 데이터베이스 비밀번호, 사용자 인증 정보, 설정 파일 등을 보호하는 데 사용됩니다.

 

Jasypt 주요 특징


1. 간단한 사용법: Jasypt는 사용하기 쉽고 간단한 API를 제공하여 개발자가 쉽게 암호화 및 복호화를 수행할 수 있습니다.

2. 다양한 알고리즘 지원: Jasypt는 다양한 암호화 알고리즘을 지원합니다. 이는 강력한 보안을 위해 필요한 경우에 선택할 수 있습니다.

3. 다양한 통합 옵션: Jasypt는 다양한 플랫폼과 프레임워크에서 사용할 수 있습니다. 예를 들어, Spring Framework와의 통합이 강력하며, 설정 파일에서 암호화를 쉽게 처리할 수 있도록 지원합니다.

4. 다양한 운영 환경 지원: Jasypt는 Java EE 및 Java SE와 같은 다양한 자바 기반 환경에서 사용할 수 있습니다.

5. Jasypt의 기본 동작은 텍스트 기반의 데이터를 암호화하고 복호화하는 데에 초점을 맞추고 있습니다. 예를 들어, 데이터베이스 연결 문자열이나 프로퍼티 파일에 저장된 비밀번호를 암호화하여 보안을 강화할 수 있습니다.

예를 들어, Spring에서 Jasypt를 사용하여 설정 파일에서 암호화된 비밀번호를 관리할 수 있습니다. 이를 통해 개발자는 민감한 정보를 안전하게 보호할 수 있습니다.

 

 

Jasypt 사용 예

 

1. 의존성 추가 : pom.xml 파일에 Jasypt의 의존성을 추가합니다.

<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.4</version>
</dependency>

 

 

 

 

2. Configuration 작성 : 복호화 하기 위한 설정을 합니다.

package co.kr.api.config;

import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimplePBEConfig;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.jasypt.salt.RandomSaltGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

@Configuration
@Component
@PropertySource("classpath:application.properties")
public class JasyptConfig {

	@Autowired
	private Environment environment;

	@Bean("jasyptStringEncryptor")
	public StringEncryptor stringEncryptor() {
		
		SimpleStringPBEConfig config = new SimpleStringPBEConfig();
		config.setPassword(environment.getProperty("pwdKey")); // 암호화 키 (암호화 키의 옵션값 - JVM 옵션)
		config.setAlgorithm("PBEWithMD5AndDES"); // 암호화 방식
		config.setKeyObtentionIterations("1000"); // 암호화 키를 얻기위해 반복해야하는 해시 횟수
		config.setPoolSize("1"); // 암호화 요청의 pool 크기 (설정하지 않을 경우 NULL)
		config.setProviderName("SunJCE");
		config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
		config.setStringOutputType("base64"); // 암호화 이후 어떤 형태로 값 받을지
		((SimplePBEConfig) config).setSaltGenerator(new RandomSaltGenerator());
        
        	PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
		encryptor.setConfig(config);
		return encryptor;
	}
}

 

 

 

 

3. 암호화 값 생성 : 암호화 된 문자열을 생성하기 위한 Class 입니다.

package co.kr.api.util;

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;

public class JasyptConfigUtils {

	public static String jasyptEncoding(String value) {
		String key = "password"; // 암호화 키
		StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor();
		pbeEnc.setAlgorithm("PBEWithMD5AndDES");
		pbeEnc.setPassword(key);

		return pbeEnc.encrypt(value);
	}

	public static void main(String[] args) {
		String dbPwd = "암호화 할 대상";
		System.out.println(jasyptEncoding(dbPwd));
	}
}

 

main 함수 실행 : 해당 class 에서 오른쪽 마우스 우클릭 - Java Application 선택 - Console에서 값 확인

 

 

 

 

4. 암호화 문자열 추가 : application.properties 또는 application.yml 파일에 암호화 관련 설정을 추가합니다.

 - 원본 값 대신에 ENC(암호화된문자열) 형식으로 속성 값을 설정합니다.

 - Jasypt는 해당 값을 암호화하고 자동으로 복호화하여 사용합니다.

# DB 비밀번호 
spring.datasource.password=ENV(jYEEDA4/mHdSKBdVos20gxj6nKzQFD/WJjREjfCo5OE=)

 

 

 

 

5. Spring Boot 실행 : JVM 속성값으로 암호화 KEY를 가져와 실행합니다.

프로젝트 우클릭 - Run As - Run Configurations - 해당 프로젝트의 VM arguments에 작성

 

728x90
반응형

+ Recent posts