[java] 암호화와 디지털 서명의 역할

이번에는 자바에서 암호화와 디지털 서명이 어떤 방식으로 이루어지는지 알아보겠습니다.

1. 암호화

암호화는 데이터를 안전하게 보호하기 위해 사용됩니다. 자바에서는 javax.crypto 패키지에 여러 가지 알고리즘을 지원하고 있습니다. 예를 들어, AES, DES, RSA 등의 알고리즘이 있죠. 이를 사용하여 데이터를 암호화하고 복호화할 수 있습니다.

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

// AES 알고리즘을 사용한 데이터 암호화 예제
public class AESEncryptionExample {

    public static void main(String[] args) throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128); // 키 사이즈를 지정
        SecretKey secretKey = keyGenerator.generateKey();

        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);

        byte[] encryptedData = cipher.doFinal("Hello, World!".getBytes());
        System.out.println("암호화된 데이터: " + new String(encryptedData));
    }
}

2. 디지털 서명

디지털 서명은 데이터의 변조 여부를 확인하고, 송신자의 신원을 확인하기 위해 사용됩니다. 자바에서는 java.security 패키지에 Signature 클래스를 이용하여 디지털 서명을 생성하고 검증할 수 있습니다.

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;

// RSA 알고리즘을 사용한 디지털 서명 예제
public class DigitalSignatureExample {

    public static void main(String[] args) throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048); // 키 사이즈를 지정
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        PrivateKey privateKey = keyPair.getPrivate();
        PublicKey publicKey = keyPair.getPublic();

        Signature signature = Signature.getInstance("SHA256withRSA");
        signature.initSign(privateKey);
        signature.update("Hello, World!".getBytes());
        byte[] digitalSignature = signature.sign();
        System.out.println("디지털 서명 데이터: " + new String(digitalSignature));

        Signature verifier = Signature.getInstance("SHA256withRSA");
        verifier.initVerify(publicKey);
        verifier.update("Hello, World!".getBytes());
        boolean isVerified = verifier.verify(digitalSignature);
        System.out.println("서명 검증 결과: " + isVerified);
    }
}

자바를 이용하여 암호화와 디지털 서명을 구현하는 방법에 대해 알아보았습니다. 데이터 보안에 중요한 역할을 하는 이러한 기술들을 이용하여 안전한 통신 및 데이터 보호에 기여할 수 있습니다.

참고 자료