본문으로 바로가기

[스프링/Spring] properties암호화

category Spring 스프링 2017. 9. 18. 13:53
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


[스프링/Spring]properties 암호화



개발 순서


1. jasypt 다운로드 및 암복호화 문자열 생성

2. pom.xml에 dependency 추가

3. properties 파일 생성

4. servlet-context.xml에 bean 추가


 

1. jasypt 다운로드 및 암복호화 문자열 생성

1-1 http://www.jasypt.org/download.html 사이트에 방문하여 JASYPT를 다운 받습니다.


1-2 1.9.2버전이 최신버전이니 최신버전을 받습니다.


1-3 다운로드 받습니다.


1-4 다운로드 받은 압축 파일을 풀고 cmd에서 bin 폴더 경로로 이동합니다.


1-5 아래와 같이 입력합니다.

encrypt input="ktko1234" password="!ktko1234@" algorithm="PBEWITHMD5ANDDES"

input값에는 실제 사용하고 있는 패스워드를 입력하고, password항목에는 암호화된 값을 복화하 할때 사용되는 Key 값을 넣으면 됩니다.

*KEY 값은 절대절대 잊어버리면 안됩니다.

실행을 하게 되면 아래와 같이 ARGUMENTS에 암호화된 알고리즘, 암호화할 값, 복호화할 Key값이 나오고 OUTPUT에는 암호화된 값이 나오고 있습니다.


2. pom.xml에 dependency 추가
1.9.0을 사용해봤는데 빈설정시 디플리케이티드가 되었어서 1.9.2 버전을 사용하였습니다.
        <dependency>
            <groupId>org.jasypt</groupId>
            <artifactId>jasypt-spring31</artifactId>
            <version>1.9.2</version>
        </dependency>


3. properties 파일 생성

Properties의 암호화 예를들어 DB접속이 가능한 패스워드를 암호화 하였습니다.

중요한 것은 암호화한 값을 ENC('암호화 값')을 넣어줘야 합니다.

그냥 암호화한 값을 넣어주면 비밀번호로 읽어버립니다.

db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://192.168.0.80:3306/ktko
db.username=root
db.password=ENC(oX+veMw3S7IDoAxUAfHN/yKlqAhk3FRg)


4. servlet-context.xml에 bean 추가

<bean id="encryptorConfig" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig"> <property name="algorithm" value="PBEWithMD5AndDES" /> <property name="password" value="!zik0404@" /> </bean> <bean id="encryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor"> <property name="config" ref="encryptorConfig"></property> </bean> <bean id="propertyConfigurer" class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer"> <constructor-arg ref="encryptor" /> <property name="locations"> <list> <value>classpath:/property/db.properties</value>

<!-- 동일한 암호화키값으로 생성된 키값을저장한 다른 properties를 추가할 수 있습니다 -->

</list> </property> </bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${db.driverClassName}"/> <property name="url" value="${db.url}" /> <property name="username" value="${db.username}"/> <property name="password" value="${db.password}"/> </bean>


5. JavaSource

자바 소스로 암복호화 하는 예제입니다.

먼저 알고리즘 종류와, 복호화 키를 setAlgorithm(), setPassword()에 입력한 후 테스트하시면 됩니다.

만약 암호화된 프로퍼티의 값을 가지고 와서 복호화를 하려면 properties의 값을 가져와서 decrypt() 안에 암호화된 값을 넣어주시면 됩니다.

        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();  
        encryptor.setAlgorithm("PBEWITHMD5ANDDES");  
        encryptor.setPassword("!ktko1234@");  
        String encryptedPass = encryptor.encrypt("ktko1234");
        String decryptedPass = encryptor.decrypt(encryptedPass);
        System.out.println("Encrypted Password for admin is : "+encryptedPass);  
        System.out.println("Decrypted Password for admin is : "+decryptedPass);