<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>gi-dor.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Thu, 02 May 2024 10:40:42 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>gi-dor.log</title>
            <url>https://velog.velcdn.com/images/gi-dor/profile/7e0f4bca-9cdd-4e06-8404-1d471fd550fa/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. gi-dor.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/gi-dor" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[application.properties 암호화 - 비전공 뉴비들 프로젝트 DB 보호하자]]></title>
            <link>https://velog.io/@gi-dor/%EB%B9%84%EC%A0%84%EA%B3%B5-%EB%89%B4%EB%B9%84%EB%93%A4-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-DB-%EB%B3%B4%ED%98%B8%ED%95%98%EC%9E%90</link>
            <guid>https://velog.io/@gi-dor/%EB%B9%84%EC%A0%84%EA%B3%B5-%EB%89%B4%EB%B9%84%EB%93%A4-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-DB-%EB%B3%B4%ED%98%B8%ED%95%98%EC%9E%90</guid>
            <pubDate>Thu, 02 May 2024 10:40:42 GMT</pubDate>
            <description><![CDATA[<p><code>application.yml</code> 이나 <code>application.properties</code> 파일에 DB의 비밀번호 또는 키 값을 
입력 한채로 깃허브에 PUSH 하는 경우 데이터들이 외부로 노출되서 보안에 문제가 생길수 있다</p>
<br>

<h4 id="어떤문제냐고-">어떤문제냐고 ?</h4>
<p><code>실제로 지난 프로젝트 당시 DB에 저장된 데이터를 모두 빼앗기고 비트코인을 지불하라는 메세지도 받았다</code></p>
<p>덕분에 DB 통채로 날리고 처음부터 다시 데이터를 손수 넣은 기억이 있다....<img src="https://velog.velcdn.com/images/gi-dor/post/65da3526-fb70-46e1-b6da-5b628d3bb83d/image.jpg" alt=""></p>
<p>대충 이런거 받음 ^^;</p>
<br>

<p>그외에  컴퓨터 포맷을 하는 상황이 올수도 있고 해서 무튼 기타등등 이유로 인해 
암호화 세팅을 해두려고 한다.
<br></p>
<hr>
<br>


<h3 id="jasypt">Jasypt</h3>
<p><code>Jasypt</code>(Java Simplified Encryption)는 개발자가 암호화 작동 방식에 대한 깊은 지식 없이도 
<strong>최소한</strong>의 노력으로 자신의 프로젝트에서 설정 파일의 속성 값들을 암호화, 복호화할 수 있는 
<code>Java 라이브러리</code>라고 한다
(진짜 지식없어도 됨;)</p>
<h3 id="특징">특징</h3>
<ol>
<li>간편하게 단방향 , 양방향 암호화 기술제공</li>
<li>문자 집합에 제약없이 사용 가능함</li>
</ol>
<h3 id="a-hrefhttpwwwjasyptorgjasypta"><a href="http://www.jasypt.org/">Jasypt</a></h3>
<p>PBEWithMD5AndDES 암호화 방식을 사용하는 경우 브라우저에서 간단하게 암호화,복호화 할 수 있다.</p>
<hr>
<h3 id="라이브러리-추가">라이브러리 추가</h3>
<pre><code>implementation &#39;com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5&#39;</code></pre><pre><code>&lt;dependency&gt;
    &lt;groupId&gt;com.github.ulisesbocchio&lt;/groupId&gt;
    &lt;artifactId&gt;jasypt-spring-boot-starter&lt;/artifactId&gt;
    &lt;version&gt;3.0.5&lt;/version&gt;
&lt;/dependency&gt;</code></pre><p>암호화 알고리즘 (Algorithm) : 3.0 버전 부터 기본 알고리즘이 PBEWithMD5AndDES 에서 PBEWITHHMACSHA512ANDAES_256로 변경 되었고 한다</p>
<hr>
<h3 id="pbewithmd5anddes">PBEWithMD5AndDES</h3>
<ol>
<li>Config 클래스 생성</li>
</ol>
<pre><code class="language-@Configuration">@EnableEncryptableProperties
public class JasyptConfig {

    @Value(&quot;${jasypt.encryptor.password}&quot;)
    private String key; // 암호화 시 사용될 키 값


    @Bean(&quot;jasyptEncryptorDES&quot;)
    public StringEncryptor stringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(key); // 암호화키
        config.setAlgorithm(&quot;PBEWithMD5AndDES&quot;); // 알고리즘
        config.setKeyObtentionIterations(&quot;1000&quot;); // 반복할 해싱 회수
        config.setPoolSize(&quot;1&quot;); // 인스턴스 pool
        config.setSaltGeneratorClassName(&quot;org.jasypt.salt.RandomSaltGenerator&quot;); // salt 생성 클래스
        config.setStringOutputType(&quot;base64&quot;); //인코딩 방식
        encryptor.setConfig(config);
        return encryptor;
    }


}
</code></pre>
<h3 id="2-jasyptconfigtest---속성-값-암호화">2. JasyptConfigTest - 속성 값 암호화</h3>
<pre><code>public class JasyptConfigTest {

    @Test
    void stringEncryptor() {
        String url = &quot;db_url&quot;;
        String username = &quot;admin&quot;;
        String password = &quot;12341234&quot;;

        System.out.println(jasyptEncoding(url));
        System.out.println(&quot;:::::   username : &quot;+jasyptEncoding(username));
        System.out.println(&quot;:::::   password : &quot;+jasyptEncoding(password));
    }

    public String jasyptEncoding(String value) {

        String key = &quot;han&quot;;
        StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor();
        pbeEnc.setAlgorithm(&quot;PBEWithMD5AndDES&quot;);
        pbeEnc.setPassword(key);
        return pbeEnc.encrypt(value);
    }</code></pre><p>Test 문으로 암호화된 값을 뽑아내지 않아도 정말정말 쉽게</p>
<p>해당 사이트에서도 암호화 진행이 가능하다 </p>
<p><a href="https://www.devglan.com/online-tools/jasypt-online-encryption-decryption">https://www.devglan.com/online-tools/jasypt-online-encryption-decryption</a></p>
<p><img src="https://velog.velcdn.com/images/gi-dor/post/a6cb9c3e-15c3-4103-ae53-e88e6cf196c0/image.jpg" alt=""></p>
<pre><code>spring.datasource.replica.username=admin
spring.datasource.replica.password=ENC(ipO5Xcn2c1tKCf2jvbNqhxGmKTzxdZBD)
ENC(암호화된 데이터)</code></pre><h3 id="3-암호화-키-값-세팅">3. 암호화 키 값 세팅</h3>
<h4 id="3---1--vm-options에-key추가">3 - 1  VM options에 key추가</h4>
<p><code>-Djasypt.encryptor.password=sample</code></p>
<p><img src="https://velog.velcdn.com/images/gi-dor/post/e87a8daa-087a-4bb5-86cb-c29a5a775740/image.png" alt=""></p>
<h4 id="3---2-applicationproperties-key-값-세팅">3 - 2 application.properties key 값 세팅</h4>
<p><code>jasypt.encryptor.password=sample</code></p>
<p>다들 DB 해킹당하는 일 없기를</p>
<hr>
<p>참고 사이트</p>
<p><a href ="https://gi-dor.tistory.com/250"> 에러
[error] application.properties 암호화 Jasypt 발생한 문제</a></p>
<br>

<p><a href= "https://goddaehee.tistory.com/321">[스프링부트] Spring Boot 설정파일(yaml, properties) 암호화 (with Jasypt) </a></p>
<p><a href="goddaehee.tistory.com">Spring Boot 설정파일 암호화</a></p>
<p><a href="https://notavoid.tistory.com/14">yml 암호화를 해보자(feat. jasypt)</a></p>
<p><a href="https://www.youtube.com/watch?v=B36xjHpU894">유튜브 개인적으로 강추함</a></p>
]]></description>
        </item>
    </channel>
</rss>