[java] 자바 서버에서 암호화 처리하기

보안은 모든 온라인 시스템에서 매우 중요한 측면입니다. 사용자 데이터를 보호하기 위해 서버에서 데이터를 암호화하는 것이 필수적입니다. 이 글에서는 자바를 사용하여 서버에서 데이터를 안전하게 암호화하는 방법을 알아보겠습니다.

Key 및 KeyStore 생성

암호화를 위해 먼저 Key를 생성해야 합니다. 다음은 자바에서 KeyPair 및 KeyStore를 생성하는 간단한 예제 코드입니다.

import java.security.*;
import java.io.FileOutputStream;

public class KeyPairGeneratorDemo {
    public static void main(String[] args) throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();

        // Save the keys to a KeyStore
        KeyStore keyStore = KeyStore.getInstance("JKS");
        char[] password = "password".toCharArray();
        keyStore.load(null, password);
        
        KeyStore.ProtectionParameter protParam = new KeyStore.PasswordProtection(password);
        KeyStore.PrivateKeyEntry privateKeyEntry = new KeyStore.PrivateKeyEntry(keyPair.getPrivate(), new Certificate[]{});
        keyStore.setEntry("myalias", privateKeyEntry, protParam);

        // Store away the keystore.
        FileOutputStream fos = new FileOutputStream("mykeystore.jks");
        keyStore.store(fos, password);
        fos.close();
    }
}

위의 예제 코드는 RSA 알고리즘을 사용하여 2048비트의 KeyPair를 생성하고, 이를 JKS 포맷의 KeyStore에 저장하는 방법을 보여줍니다.

데이터 암호화 및 복호화

이제 KeyStore에 저장된 Key를 사용하여 데이터를 암호화하고 복호화하는 방법을 알아보겠습니다.

import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyStore;
import java.io.FileInputStream;

public class EncryptionDemo {
    public static void main(String[] args) throws Exception {
        KeyStore keyStore = KeyStore.getInstance("JKS");
        FileInputStream fis = new FileInputStream("mykeystore.jks");
        keyStore.load(fis, "password".toCharArray());

        KeyPair keyPair = new KeyPair(keyStore.getCertificate("myalias").getPublicKey(), (java.security.PrivateKey) keyStore.getKey("myalias", "password".toCharArray()));

        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
        byte[] encryptedData = cipher.doFinal("Hello, World!".getBytes());
        
        cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
        byte[] decryptedData = cipher.doFinal(encryptedData);
        System.out.println("Decrypted data: " + new String(decryptedData));
    }
}

위의 예제 코드는 저장된 Key를 사용하여 “Hello, World!” 라는 문자열을 암호화하고, 다시 복호화하여 출력하는 방법을 보여줍니다.

이제 서버 애플리케이션에서 이러한 암호화 및 복호화 기술을 활용하여 사용자 데이터를 안전하게 보호할 수 있습니다.