본문 바로가기
Java & Spring

Jasypt

by 모닝위즈 2024. 10. 17.
반응형

 

1. Jasypt란 Java Simplified Encryption의 약자이며, Java 언어로 개발된 간단한 암호화 및 복호화 기능을 제공하는 라이브러리이다.

 

2. 장점

  • Jasypt는 다양한 암호화 알고리즘과 기술을 지원하여 데이터 보안을 향상하는 데 도움을 준다.
  • Jasypt는 대칭키 및 비대칭키 암호화 방식을 지원하고, AES, RSA 등 다양한 알고리즘을 선택할 수 있다.
  • 소스코드나 성정 파일에 민감한 정보가 노출되지 않도록 해준다.

3. 예제

###### 데이터베이스 연결 정보 ######
## Database Configuration
db.driverClassName=net.sf.log4jdbc.DriverSpy
db.url=G7AX2MI3LkSu4QTc8Rrg8SvH3KpTnKQtdwQvPQquGh4lyQakAtxnpBKeKSBU2Rb15Xwx8viuBX0RpslGydLvZSqzMuoLRHPcj0Nizpvy5LuUuMAm1mmlzwQN8PYjfZiXWnmz6nF1CsyGITX03ydc85BmNXeb+ZE0oO7yBpgPozY=
db.username=12jZy3qMYXQTBdnsE1Ed/YX0+MrtFX8h
db.password=o1SU+9dyALOW37cFwVfuKZs44oEu06YF

... 이하 생략 ...

- 이런식으로 암호화가 되어 유출이 되어도 파악하기 힘들다. 

 

4. Spring에서의 적용

/**
 * @Class Name : WeaverJasyptEncryptorWrapper.java
 * @Description : WeaverJasyptEncryptorWrapper Class
 * @Modification Information
 * @
 * @  수정일      수정자              수정내용
 * @ ---------   ---------   -------------------------------
 * @ 2024.08.05    mitw      Jasypt 활용을 위한 Wrapper 구성
 *
 * @author mitw
 * @since 2024.08.05
 * @version 1.0
 */
public class WeaverJasyptEncryptorWrapper {

    private StandardPBEStringEncryptor encryptor;

    public WeaverJasyptEncryptorWrapper(StandardPBEStringEncryptor encryptor){
        this.encryptor = encryptor;
        this.encryptor.setAlgorithm(GetProperties.getProperty("jasypt.algorithm"));
        this.encryptor.setPassword(GetProperties.getProperty("jasypt.password"));
    }

    public String weaverJasyptDecrypt(String enc){
       return encryptor.decrypt(enc);
    }
}

 

- 위와 같이 StandardPBEStringEncryptor를 사용하기 위한 WeaverJasyptEncryptorWrapper를 구현한다.

@Configuration
public class ContextDataSource {

    WeaverJasyptEncryptorWrapper encryptorAdapter = new WeaverJasyptEncryptorWrapper(new StandardPBEStringEncryptor());

    @Bean
	public DataSource dataSource(){
		return new HikariDataSource(hikariConfig());
	}   

	// HikariCP Configure
	public HikariConfig hikariConfig(){
		HikariConfig hikariConfig = new HikariConfig();
		hikariConfig.setDriverClassName(GetProperties.getProperty("db.driverClassName"));
		hikariConfig.setJdbcUrl(encryptorAdapter.weaverJasyptDecrypt(GetProperties.getProperty("db.url")));
		hikariConfig.setUsername(encryptorAdapter.weaverJasyptDecrypt(GetProperties.getProperty("db.username")));
		hikariConfig.setPassword(encryptorAdapter.weaverJasyptDecrypt(GetProperties.getProperty("db.password")));
		hikariConfig.setMaximumPoolSize(Integer.parseInt(GetProperties.getProperty("db.maximumPoolSize")));
		hikariConfig.setMinimumIdle(Integer.parseInt(GetProperties.getProperty("db.minimumIdle")));
		hikariConfig.setConnectionTimeout(Long.parseLong(GetProperties.getProperty("db.connectionTimeout")));
		hikariConfig.setIdleTimeout(Long.parseLong(GetProperties.getProperty("db.idleTimeout")));
		hikariConfig.setMaxLifetime(Long.parseLong(GetProperties.getProperty("db.maxLifetime")));
		hikariConfig.setLeakDetectionThreshold(Long.parseLong(GetProperties.getProperty("db.leakDetectionThreshold")));
		return new HikariDataSource(hikariConfig);
	}

}

 

- 가령 이런식으로의 사용이 가능해진다. 

 

 

Jasypt.. 뭐라고 읽는거니.. 자십트? 

자십트 자십트 하니까.. 

왜 자꾸 이런게 생각나지.. ㅡㅡ;;

 

자십트 이기는 부모 없다... ㅈㅅ

댓글