-
[암호화] property 암호화하기Health-Genie 2023. 4. 4. 23:59728x90
Node에는 .env 파일이 있다면, Java에는 Jasypt가 있다
jasypt란
개발자가 암호화 작동 방식에 대한 깊은 지식 없이도 자신의 프로젝트에 기본 암호화 기능을 추가할 수 있도록 하는 java 라이브러리
특징
- 간편한 단방향 및 양방향 암호화 기술 제공
- 스레드로부터 안전함 ( 스프링 같은 싱글톤 환경에서 동기화 걱정없이 사용 가능 )
- 원본 문자 집합에 대한 제약없이 사용 가능 ( 일본, 한국어 등의 언어 지원 )
Jasypt 사용법
1. Gradle 추가
implementation "com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.3"
2. Jasypt 파일 ( configuration File ) & main 쓰래드 있는 파일에 어노테이션 추가
import lombok.extern.slf4j.Slf4j; import org.jasypt.encryption.StringEncryptor; import org.jasypt.encryption.pbe.PooledPBEStringEncryptor; import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; @Configuration @Slf4j @EnableEncryptableProperties public class JasyptConfig { @Bean("jasyptStringEncryptor") public StringEncryptor stringEncryptor() { PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); SimpleStringPBEConfig config = new SimpleStringPBEConfig(); config.setPassword(System.getProperty("jasypt.encryptor.password")); // "jasypt.encryptor.password" 얘는 나중에 VM 옵션에 넣기 config.setAlgorithm("PBEWithMD5AndDES"); config.setKeyObtentionIterations("1000"); config.setPoolSize("1"); config.setProviderName("SunJCE"); config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); config.setStringOutputType("base64"); encryptor.setConfig(config); return encryptor; } } @SpringBootApplication public class CafeManagementSystemApplication { public static void main(String[] args) { SpringApplication.run(CafeManagementSystemApplication.class, args); } }
1. PooledPBEStringEncryptor에서 PBE는 하나의 알고리즘이다.
2. setKeyObtentionIterations는 해싱 횟수 ( 1000번 암호화를 시킨다는 의미 )
3. setSaltGeneratorClassName는 random한 salt 클래스를 생성 하겠다세팅 값 3. 속성값 암호화 하기
www.devglan.com/online-tools/jasypt-online-encryption-decryption
Programming Blog Article Feeds as per your Interest | DevGlan
Best programming article feeds as per your Interest on different technologies. Subscribe to any technology and explore the best articles from around the web.
www.devglan.com
다른 방법으로는 학습용으로 Test 폴더에 ENC에 넣을 내용을 Test file에서 구해준다
@SpringBootTest class JasyptConfigTest { @Test void encryptTest() { String id = "root"; String password = "test"; System.out.println(jasyptEncoding(id)); System.out.println(jasyptEncoding(password)); } public String jasyptEncoding(String value) { String key = "test_code_password"; StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor(); pbeEnc.setAlgorithm("PBEWithMD5AndDES"); pbeEnc.setPassword(key); return pbeEnc.encrypt(value); } }
값이 나오면 yml 파일에 username = ENC(암호화된 내용) 이렇게 적어주면 된다
4. application.yml 파일
jasypt: encryptor: bean: jasyptStringEncryptor property: prefix: ENC( suffix: )
5. 암호화된 값을 ENC()에 넣어주기
username = ENC(uH7rMz8dnT9CZ4InB1UOEQ==) password = ENC(HeAElByZwRlcMUj60b8TCg==)
6. 외부에서 password 전달
- build.gradle에 추가
test { useJUnitPlatform() systemProperty 'jasypt.encryptor.password', findProperty("jasypt.encryptor.password") }
- 구성편집 > VM 옵션
-Djasypt.encryptor.password=비밀번호를 암호화할때 사용하는 키
돌려보면 될거야~!!
기존에 걸로 돌리면 test 돌릴시 /application.yml을 찾지 못한다는 에러 발생.
jasypt config 파일에 있던 애노테이션 수정 했습니다.
'Health-Genie' 카테고리의 다른 글
[symbol 에러] error: cannot find symbol log.info (1) 2023.06.12 [UserDetail] InternalAuthenticationServiceException 에러 (0) 2023.06.04 [mail] Authentication Fail 문제 (0) 2023.06.04 [MySQL 1822 에러] Failed to add the foreign key constraint (0) 2023.06.02 [DB설계] ERD 설계 (0) 2023.05.24