Recent Posts
Recent Comments
Link
11-21 14:38
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

Jasypt(Java Simplified Encryption) 사용 방법 본문

DEV&OPS/Java

Jasypt(Java Simplified Encryption) 사용 방법

ALEPH.GEM 2024. 5. 8. 20:41

# Jasypt(Java Simplified Encryption)

Jasypt는 자바 애플리케이션에서 간단한 암호화/복호화를 수행하기 위한 라이브러리입니다.
주로 프로퍼티파일이나 xml 등 설정 파일의 계정 정보 같은 문자열 데이터를 암호화/복호화하는 데 사용합니다.
내부적으로 양방향 암호화와 단방향(Hash) 암호화를 조합하여 비교적 높은 수준의 암호화/복호화를 간편하게 사용할 수 있습니다.
암호화키를 안전하게 저장하고 노출되지 않도록 주의해야 합니다.
텍스트와 바이너리 모두 암호화/복호화 할 수 있습니다.
Spring Security와도 연동 가능하며 멀티 스레드로부터 안전합니다.

 

# 의존성 추가

여기서는 1.9.3 버전 기준으로 합니다.

maven의 경우

<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt</artifactId>
    <version>1.9.3</version>
</dependency>


gradle의 경우

implementation 'org.jasypt:jasypt:1.9.3'

 

 

# 기본 암호화

import org.jasypt.util.text.BasicTextEncryptor;

public class Encrypt {
    public static void main(String[] args) {
        BasicTextEncryptor bte = new BasicTextEncryptor();
        bte.setPassword("암호화에사용할패스워드");
        System.out.println("암호화된 Text: " + bte.encrypt("암호화할평문TEXT데이터"));
    }
}

 

 

# 기본 복호화

import org.jasypt.util.text.BasicTextEncryptor;

public class Decrypt {
    public static void main(String[] args) {
        BasicTextEncryptor bte = new BasicTextEncryptor();
        bte.setPassword("암호화에사용할패스워드");
        System.out.println("복호화된 평문 Text: " + bte.decrypt("암호화된TEXT데이터"));
    }
}

 

 

# 암호화/복호화 키

암호화를 위해서는 암호화키(패스워드)를 생성해야 합니다.
이 키는 보통 환경변수(예: JRE 실행시 -DJASYPT_ENCRYPTION_KEY=암호화키)에 설정한 후 System.getProperty()로 읽어서 사용하거나 외부 설정 파일에 저장하여 애플리케이션에서 읽어서 사용합니다.

 

 

# org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI 클래스

이 클래스는 Command Line Interface(터미널 or 명령 프롬프트)에서 암호화/복호화를 실행할 수 있게 해주는 실행 가능 클래스입니다.
실행 시에 암호화 알고리즘과 암호화 키, salt 값을 지정할 수 있습니다.

java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="암호화할 평문TEXT" password="암호화할때사용할키값(패스워드)" algorithm="적용할 알고리즘 이름"


여기서 적용 가능 알고리즘 이름은 다음과 같습니다. 단, 라이브러리 버전에 따라 달라질 수 있습니다.

  • PBEWithMD5AndDES: MD5 해시 함수와 DES 대칭 암호화를 사용합니다. 
  • PBEWithMD5AndTripleDES: MD5 해시 함수와 Triple DES 대칭 암호화를 사용합니다. 
  • PBEWithSHA1AndDESede: SHA-1 해시 함수와 Triple DES 대칭 암호화를 사용합니다. 
  • PBEWithSHA1AndRC2_40: SHA-1 해시 함수와 RC2 40비트 대칭 암호화를 사용합니다.
  • PBEWithSHA1AndRC2_128: SHA-1 해시 함수와 RC2 128비트 대칭 암호화를 사용합니다.
  • PBEWithSHA1AndRC4_40: SHA-1 해시 함수와 RC4 40비트 대칭 암호화를 사용합니다.
  • PBEWithSHA1AndRC4_128: SHA-1 해시 함수와 RC4 128비트 대칭 암호화를 사용합니다.
  • PBEWithMD5AndTripleDES: MD5 해시 함수와 Triple DES 대칭 암호화를 사용합니다.
  • PBEWithMD5AndRC2: MD5 해시 함수와 RC2 대칭 암호화를 사용합니다.
  • PBEWithHmacSHA1AndAES_128: HmacSHA1 해시 함수와 AES 128비트 대칭 암호화를 사용합니다.
  • PBEWithHmacSHA1AndAES_256: HmacSHA1 해시 함수와 AES 256비트 대칭 암호화를 사용합니다.


리눅스 실행용 sh 파일 예제 : 라이브러리 파일과 같은 경로에 작성 후 실행합니다.

echo -n "Enter the input to encrypt: "
read INPUT
ENCRYPTION_KEY="encypt password key example"
JASYPT_JAR_PATH="./jasypt-1.9.3.jar"
ALGORITHM="위에 언급된 알고리즘 이름"
java -cp "$JASYPT_JAR_PATH" org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="$INPUT" password="$ENCRYPTION_KEY" algorithm="$ALGORITHM"

이 sh파일을 실행하고 암호화하고 싶은 평문을 입력하면 암호화된 TEXT가 표시됩니다.



properties 파일에서 사용 예제:

위 sh 파일로 생성한 암호화된 문자열을 prpperties파일등에서 ENC()으로 감싸서 사용합니다.

dataSource.user=ENC(암호화된TEXT)
dataSource.password=ENC(암호화된TEXT)

위 프로퍼티을 읽은 후 자바 애플리케이션에서 읽은 후 복호화 해서 사용하면 됩니다.

암호화에 사용된 키, salt, 알고리즘 정보는 따로 환경변수 등으로 application으로 전달해서 사용해도 됩니다.

물론 sh 파일을 실행해서 암호문을 생성할 때 사용했던 값(알고리즘, salt, 암호화키)들을 일치시켜 줘야겠죠.

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;

... 생략

    StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
    encryptor.setPassword("암호화키");
    encryptor.setAlgorithm("암호화할 때 썼던 알고리즘 이름");
    String decryptedUsername = encryptor.decrypt("ENC()안에 있는 암호화된 TEXT");

... 생략

 

 

 

 

 

728x90