<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AES on Korobopolly's Dev Blog</title><link>https://korobopolly.github.io/tags/aes/</link><description>Recent content in AES on Korobopolly's Dev Blog</description><generator>Hugo</generator><language>ko</language><lastBuildDate>Mon, 16 Feb 2026 13:25:00 +0900</lastBuildDate><atom:link href="https://korobopolly.github.io/tags/aes/index.xml" rel="self" type="application/rss+xml"/><item><title>암호화 기초 - AES, RSA, 디지털 서명, 패스워드 해싱, 하이브리드 암호화</title><link>https://korobopolly.github.io/posts/security-encryption-basics/</link><pubDate>Mon, 16 Feb 2026 13:25:00 +0900</pubDate><guid>https://korobopolly.github.io/posts/security-encryption-basics/</guid><description>&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;현대 소프트웨어 시스템에서 데이터 보안은 선택이 아닌 필수입니다. 사용자 비밀번호, 개인정보, 금융 데이터 등 민감한 정보를 안전하게 보호하려면 암호화 기술을 올바르게 이해하고 적용해야 합니다.&lt;/p&gt;
&lt;p&gt;이 글에서는 대칭키 암호화(AES), 비대칭키 암호화(RSA), 디지털 서명의 원리와 Java 구현을 실전 예제와 함께 다룹니다.&lt;/p&gt;
&lt;h2 id="암호화가-필요한-이유"&gt;암호화가 필요한 이유&lt;/h2&gt;
&lt;h3 id="보호해야-할-데이터"&gt;보호해야 할 데이터&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;저장 데이터(Data at Rest)&lt;/strong&gt;: 데이터베이스의 비밀번호, 개인정보&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;전송 데이터(Data in Transit)&lt;/strong&gt;: HTTPS 통신, API 요청/응답&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;처리 데이터(Data in Use)&lt;/strong&gt;: 메모리 상의 민감 정보&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="암호화-없이-발생하는-문제"&gt;암호화 없이 발생하는 문제&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;// 위험한 예: 평문 저장&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String password &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; &lt;span style="color:#a6e3a1"&gt;&amp;#34;user1234&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;db.&lt;span style="color:#89b4fa"&gt;save&lt;/span&gt;(&lt;span style="color:#a6e3a1"&gt;&amp;#34;INSERT INTO users (password) VALUES (&amp;#39;&amp;#34;&lt;/span&gt; &lt;span style="color:#89dceb;font-weight:bold"&gt;+&lt;/span&gt; password &lt;span style="color:#89dceb;font-weight:bold"&gt;+&lt;/span&gt; &lt;span style="color:#a6e3a1"&gt;&amp;#34;&amp;#39;)&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;// DB 유출 시 모든 비밀번호 노출&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;// 위험한 예: 평문 전송&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;HttpClient.&lt;span style="color:#89b4fa"&gt;get&lt;/span&gt;(&lt;span style="color:#a6e3a1"&gt;&amp;#34;http://api.example.com/user?apiKey=secret123&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;// 중간자 공격(MITM)으로 API 키 탈취 가능&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="암호화-적용-후"&gt;암호화 적용 후&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;// 안전한 예: 암호화 저장&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String encrypted &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; AESUtil.&lt;span style="color:#89b4fa"&gt;encrypt&lt;/span&gt;(password, secretKey);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;db.&lt;span style="color:#89b4fa"&gt;save&lt;/span&gt;(&lt;span style="color:#a6e3a1"&gt;&amp;#34;INSERT INTO users (password) VALUES (&amp;#39;&amp;#34;&lt;/span&gt; &lt;span style="color:#89dceb;font-weight:bold"&gt;+&lt;/span&gt; encrypted &lt;span style="color:#89dceb;font-weight:bold"&gt;+&lt;/span&gt; &lt;span style="color:#a6e3a1"&gt;&amp;#34;&amp;#39;)&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;// DB 유출되어도 암호화된 상태&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;// 안전한 예: HTTPS 사용&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;HttpClient.&lt;span style="color:#89b4fa"&gt;get&lt;/span&gt;(&lt;span style="color:#a6e3a1"&gt;&amp;#34;https://api.example.com/user?apiKey=secret123&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6c7086;font-style:italic"&gt;// TLS/SSL로 암호화된 통신&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="대칭키-암호화-aes"&gt;대칭키 암호화 (AES)&lt;/h2&gt;
&lt;p&gt;같은 키로 암호화와 복호화를 수행하는 방식입니다. 빠르고 효율적이지만 키 공유 문제가 있습니다.&lt;/p&gt;</description></item></channel></rss>