IT/Live Coding

Spring Boot + Jasypt를 이용한 암호화 테스트 🔐 (테스트 영상 & 소스코드 포함)

어흥꼬비 2025. 3. 22.

Spring Boot + Jasypt를 이용한 암호화 테스트 🔐 (테스트 영상 & 소스코드 포함)

Spring BootJasypt를 이용한 간단한 암호화 예제입니다.
애플리케이션 설정 파일에 포함된 민감한 정보암호화해서 안전하게 관리하는 방법을 다뤄봅니다.

이 예제에서는 Spring Boot와 Jasypt를 활용해 암호화된 값을 설정 파일에 저장하고, 이를 복호화하는 간단한 방법을 소개합니다.


동영상 🎬

 

소스 💻

application.yml

server:
  port: 9090
  servlet:
    context-path: /
    encoding:
      charset: UTF-8
      enabled: true
      force: true

spring:
  thymeleaf:
    enabled: true
    cache: false

  devtools:
    livereload.enabled: true
    restart.enabled: true
  datasource:
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
    url: ENC(암호화값)
    username: ENC(암호화값)
    password: ENC(암호화값)

jasypt:
  encryptor:
    # JasyprtConfig에서 만든 빈
    bean: jasyptStringEncryptor
    property:
      prefix: ENC(
      suffix: )

build.gradle

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.3.10'
    id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.lsy'
version = '0.0.1-SNAPSHOT'

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
    }
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    // Logging
    implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
    // jasypt
    implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'com.mysql:mysql-connector-j'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
    useJUnitPlatform()
}

java 소스

JasyprtConfig

package com.lsy.jasyptsimple.config;

import com.lsy.jasyptsimple.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.jasypt.encryption.StringEncryptor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@Slf4j
public class JasyprtConfig {

    // vm 옵션으로 전달받은 개인키
    @Value("${jasypt.password}")
    private String jasyptPassword;

    @Bean(name="jasyptStringEncryptor")
    public StringEncryptor stringEncryptor() {
        // vm 옵션으로 전달받은 개인키로 암호화 후 그 객체를 반환해서 빈으로 등록
        StringEncryptor encryptor = StringUtils.getEncryptor(jasyptPassword);
        log.info("encryptor :: {}", encryptor);
        return encryptor;
    }
}

StringUtils

package com.lsy.jasyptsimple.utils;

import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;

public class StringUtils {

    // 인자값으로 받은 키값으로 암호화 후 그 객체 반환
    public static StringEncryptor getEncryptor(String key) {
        // Config
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(key);                    // 암호화 키
        config.setAlgorithm("PBEWithMD5AndDES");    // 암호화 알고리즘
        config.setKeyObtentionIterations("1000");   // 반복할 해싱 횟수
        config.setPoolSize("1");                    // 인스턴스 pool
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");    // salt 생성 클래스
        config.setStringOutputType("base64");       // 인코딩 방식

        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setConfig(config);
        return encryptor;
    }
}

애플리케이션 실행 시 vm option 추가

-Djasypt.password={개인키로 사용할 해시값}

개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.

틀린 점 있을 경우 댓글 부탁드립니다.

 

 

Spring Boot + Redis 캐싱 구현하기 (테스트 영상 & 소스 코드 포함)

Redis를 활용한 캐싱 구현! (짧고 간단한 영상)역시나 레디스 공부한 것 까먹기 싫어 기록으로 남긴다.동영상소스application.ymlserver: port: 9090 servlet: context-path: / encoding: charset: UTF-8 enabled: true force: tru...

yaga.tistory.com

 

Spring Boot + JWT로 인증 시스템 구현 (테스트 영상 & 소스 코드 포함)

springBoot와 JWT를 이용한 인증 서버를 간단히 구축해봤다.메타코딩님의 "스프링부트 시큐리티 - JWT"를 보고, 이를 바탕으로 스스로 복기하며 학습한 내용을 기록으로 남긴다.동영상 🎬 JwtAuthorizati...

yaga.tistory.com