-
[Spring] Jasypt 프로퍼티스 암호화DEV/Spring 2022. 9. 20. 11:30
프로젝트 중 프로퍼티스 암호화가 필요하여 적용해보았다.
잊기전에 정리.
pom.xml 에 해당 라이브러리 사용을 위해 추가
<dependency> <groupId>org.jasypt</groupId> <artifactId>jasypt-spring31</artifactId> <version>1.9.3</version> </dependency>
db-context.xml 에 추가
<beans:bean class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer"> <beans:constructor-arg ref="encryptor"/> <beans:property name="locations"> <beans:list> <beans:value>classpath:properties/dbconnect.properties</beans:value> </beans:list> </beans:property> </beans:bean> <beans:bean id="encryptorConfig" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig"> <beans:property name="algorithm" value="PBEWithMD5AndDES"/> <beans:property name="password" value="testKey"/> </beans:bean> <beans:bean id="encryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor"> <beans:property name="config" ref="encryptorConfig"/> </beans:bean>
2번째 bean encryptorConfig에서
algorithm은 PBEWithMD5AndDES
password에는 실제 패스워드가 아닌 Key값을 넣어준다.
여기서 해당 key 값도 프로퍼티스에서 가져오는 방식을 사용하고싶었지만 뜻대로 되지않았다..
혹시 방법이나 안되는 이유를 알고 계신분은 댓글 남겨주시면 감사하겠습니다.
@ResponseBody @RequestMapping(value="/encrypt.do", method= RequestMethod.POST) public Map<String, Object> encrypt(@RequestParam Map<String, Object> map, HttpServletRequest request) { Map<String, Object> rtnMap = new HashMap<String, Object>(); try { StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor(); standardPBEStringEncryptor.setAlgorithm("PBEWithMD5AndDES"); standardPBEStringEncryptor.setPassword(map.get("key").toString()); String encryptedPass = standardPBEStringEncryptor.encrypt(map.get("password").toString()); System.out.println("Encrypted Password is ====> "+encryptedPass); rtnMap.put("status", "SUCCESS"); rtnMap.put("encryptedPass", encryptedPass); } catch (Exception e) { rtnMap.clear(); rtnMap.put("status", "ERROR"); rtnMap.put("msg" , e.getMessage()); } return rtnMap; }
나는 다음과같이 사용자가 화면에서 key와 password 입력시 암호화된 password를 받아서 사용할 수 있도록 했다.
간단하게 setAlgorithm()과 setPassword() 만 사용했지만 다른 설정도 많으니 찾아보는것을 추천.
여기서 입력받은 key값은 db-context.xml 에 password property에 넣어주고,
encryptedPass 값은 사용하고 있는 db properties에 ENC()로 감싸서 사용하면 된다.
ex)
jdbc.password=ENC(fmfwPDQtsyKsVgkM/aEZ5g==)
끗.
마지막으로 사용자 화면 필요하신분들을 위해 .. 일부 발췌
<body> <form id="encForm" name="encForm"> <h3>암호화 문자열 생성기</h3> KEY : <input type="text" name="key"><br/> 암호화할 값 : <input type="text" name="password"/><br/> </form> <input type="button" value="인크립트" onclick="Encryption();"><br/> <textarea id="result" rows="12" cols="70"></textarea> <script type="text/javascript"> function Encryption() { $.ajax({ url: "/encrypt.do", data: $('#encForm').serialize() , type: "POST", success: function() { }, complete: function(xhr, data) { var result = JSON.parse(xhr.responseText); if(result.status == "SUCCESS") { $("#result").val(result.encryptedPass); }else{ alert("암호화중 오류가 발생했습니다."); console.log(result.msg); } } }); } </script> </body>
'DEV > Spring' 카테고리의 다른 글
[Spring] AOP 심화 - JoinPoint와 ProceedingJoinPoint / 동작 원리 / 프록시 / JDK Proxy와 CGLib Proxy (0) 2024.05.17 [Spring] 스프링 프레임워크 특징/ POJO / IoC / DI / AOP / PSA (0) 2024.05.08 전자정부프레임워크기반 게시판 만들기 (6) 파일 업로드,다운로드 (2) 2020.12.31 전자정부프레임워크기반 게시판 만들기 (5) 페이징,검색 (2) 2020.12.30 전자정부프레임워크기반 게시판 만들기 (4) 글 상세보기,삽입,수정,삭제 (2) 2020.12.30