삶 가운데 남긴 기록 AACII.TISTORY.COM
Jasypt(Java Simplified Encryption) 사용 방법 본문
# 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");
... 생략
'DEV&OPS > Java' 카테고리의 다른 글
JAVA URL, JSON 처리 (0) | 2024.05.08 |
---|---|
JAVA application 런타임 상태 정보 유지 기법 (0) | 2024.05.08 |
JAVA Visitor 패턴 - 자료구조를 돌아다니면서 처리 (0) | 2024.05.08 |
SWT JFace 주요 위젯 (0) | 2024.05.08 |
MyBatis 동적 쿼리의 기본 (0) | 2024.05.08 |