본문 바로가기
GD's IT Lectures : 기초부터 시리즈/자바(JAVA) 기초부터 ~

[자바(JAVA)] 자바와 암호화

by GDNGY 2023. 4. 30.

41. 자바와 암호화

41.1. 암호화 개요

암호화는 데이터를 보호하기 위해 사용되는 기술로, 텍스트나 데이터를 암호화된 형태로 변환하여 원본 데이터를 보호합니다. 암호화된 데이터는 복호화 과정을 거쳐 원본 데이터로 복원할 수 있습니다. 암호화 기술은 대칭키 암호화, 비대칭키 암호화, 해시 함수 등 다양한 방식이 존재합니다.

 

41.2. 자바에서 제공하는 암호화 라이브러리

자바는 다양한 암호화 기술을 지원하기 위해 Java Cryptography Architecture (JCA) 및 Java Cryptography Extension (JCE)를 제공합니다. 이를 활용하여 대칭키 암호화, 비대칭키 암호화, 해시 함수 등을 사용할 수 있습니다.

 

41.3. 대칭키 암호화와 비대칭키 암호화
  • 대칭키 암호화: 암호화와 복호화에 동일한 키를 사용하는 방식입니다. 예를 들어, AES(Advanced Encryption Standard)가 대표적인 대칭키 암호화 알고리즘입니다.
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;

public class SymmetricEncryptionExample {
    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("Encrypted data: " + Base64.getEncoder().encodeToString(encryptedData));

        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedData = cipher.doFinal(encryptedData);

        System.out.println("Decrypted data: " + new String(decryptedData));
    }
}

 

  • 비대칭키 암호화: 암호화와 복호화에 서로 다른 키를 사용하는 방식입니다. 공개키와 개인키의 쌍으로 구성되며, RSA 알고리즘이 대표적입니다.
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;

public class AsymmetricEncryptionExample {
    public static void main(String[] args) throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();

        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encryptedData = cipher.doFinal("Hello, world!".getBytes());

        System.out.println("Encrypted data: " + Base64.getEncoder().encodeToString(encryptedData));
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decryptedData = cipher.doFinal(encryptedData);

        System.out.println("Decrypted data: " + new String(decryptedData));
    }
}

 

41.4. 해시 함수와 메시지 다이제스트

해시 함수는 데이터를 고정 길이의 고유한 값으로 변환하는 기술입니다. 이 과정에서 데이터의 무결성을 확인할 수 있습니다. MD5, SHA-1, SHA-256 등이 해시 함수의 예입니다. 자바에서는 MessageDigest 클래스를 사용하여 해시 값을 생성할 수 있습니다.

 

import java.security.MessageDigest;

public class HashFunctionExample {
    public static void main(String[] args) throws Exception {
        String data = "Hello, world!";
        MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
        byte[] hash = messageDigest.digest(data.getBytes());

        System.out.println("Hashed data: " + bytesToHex(hash));
    }

    private static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }
}

 

위 예제에서는 SHA-256 해시 알고리즘을 사용하여 문자열을 해시 값으로 변환했습니다. 이를 통해 데이터의 무결성을 확인할 수 있습니다. 자바의 암호화 기능을 활용하면 다양한 암호화 및 해시 알고리즘을 사용하여 데이터 보호를 할 수 있습니다. 이를 통해 보안이 중요한 애플리케이션을 개발할 수 있습니다.






반응형

댓글