Jasypt는 Java, Java+Spring, Java+Hibernate 등 여러 프레임워크에서 암복호화를 지원해주는 오픈소스로 개발자가 암호화 작동 방식에 대한 깊은 지식 없이도 최소한의 노력으로 프로젝트에 기본 암호화 기능을 추가할 수 있는 Java 라이브러리이다.
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt-spring31</artifactId>
<version>1.9.2</version>
</dependency>
context에 복호화를 위한 bean 객체 3개를 만든다.
<beans:bean id="encryptorConfig" class="org.jasypt.encryption.pbe.config.EnvironmentPBEConfig">
<beans:property name="algorithm" value="PBEWithMD5AndDES" />
<beans:property name="passwordEnvName" value="TEST_KEY" />
</beans:bean>
<beans:bean id="encryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
<beans:property name="config" ref="encryptorConfig" />
</beans:bean>
<beans:bean class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
<beans:constructor-arg ref="encryptor" />
<beans:property name="locations">
<beans:list>
<beans:value>classpath:config/db-context-loc.properties</beans:value>
</beans:list>
</beans:property>
</beans:bean>
위에 encryptorConfig를 보면 algorithm과 passwordEnvName이 있다.
algorithm
: 암/복호화 알고리즘이다. 암호화 할 때 쓴 알고리즘 이름을 넣어야 한다.
passwordEnvName
: 암,복호화에 필요한 key password를 지정한 키 값으로 key는 자기마음대로 생성이 가능하다.
db.driver=com.mysql.jdbc.Driver
db.url=ENC(dA5m1XXzMMqixudUjoPtve6hSrKnNgDnG6yXytBcnoSzPx46zNl32Q7y1gvI3jMB)
db.username=ENC(X3scraZNomhTtGD8QAndPw==)
db.password=ENC(eGaAQsn3ejXTMusZjl78sg==)
암호화 시킬 구문은 ENC( .... ) 로 작성하였다.
암호화 문자열 생성 방법에는 실행파일로 생성하는 방법과 코드로 생성하는 방법 2가지가 있다.
http://www.jasypt.org/download.html 로 가서 Jasypt를 다운로드 받고 압축을 푼다.
해당 폴더의 /bin 으로 들어가 cmd 를 열고 아래와 같이 입력한다.
encrypt input="암호화할 값"
password="암호화 키"
algorithm="PBEWITHMD5ANDDES"
위에 내용과 bean을 만들 때 입력했던
< property name="algorithm" value="......" />
부분은 동일해야 한다.
실행파일로 생성했던 부분과 달리 별도의 다운로드 과정이 없고 아래와 같이 테스트코드를 작성해서 구현하면 된다.
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
standardPBEStringEncryptor.setAlgorithm("PBEWithMD5AndDES");
standardPBEStringEncryptor.setPassword("TEST_KEY");
String encodedPass = standardPBEStringEncryptor.encrypt("1q2w3e4r!!");
System.out.println("Encrypted Password for admin is : "+encodedPass);