부트캠프(Java)

공개키암호

동곤일상 2025. 6. 25. 17:45
반응형
  • 공개키 (Public Key): 누구나 접근 가능하며, 데이터를 암호화하거나 서명을 검증하는 데 사용.
  • 개인키 (Private Key): 소유자만이 가지고 있으며, 암호화된 데이터를 복호화하거나 디지털 서명을 생성하는 데 사용.
  •  
  • 작동 원리:
  • 공개키로 암호화된 데이터는 해당 개인키로만 복호화 가능. 
  • 개인키로 생성한 서명은 공개키로 검증 가능.

예시를 들어봅시다

public class Main_01 {
    public static void main(String[] args) {
        String plain1 = "안녕하세요 김석범입니다";
        String cipher1 = CipherRSA.encrypt(plain1);
        System.out.println("암호문 : " +cipher1);
        String plain2 = CipherRSA.decrypt(cipher1);
        System.out.println("복호문 : "+plain2);

    }
}

암호화 후 복호화를 해보자 

 

 

 

static Cipher cipher;
    static PrivateKey privateKey;
    static PublicKey publicKey;

    static {
        try {
            /*
            RSA : 암호화알고리즘
            ECB : 블럭암호화
            PKCS1Padding :
             */
            cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
            KeyPairGenerator key = KeyPairGenerator.getInstance("RSA");
            KeyPair keyPair = key.generateKeyPair(); //쌍인 키객체 생성
            privateKey = keyPair.getPrivate();//개인키
            publicKey = keyPair.getPublic();//공개키
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

암호화(개인키 사용)

 public static String encrypt(String plain1) {
        byte[] cipherMsg = new byte[1024];

        try {
            cipher.init(Cipher.ENCRYPT_MODE, privateKey);//개인키로암호화
            cipherMsg = cipher.doFinal(plain1.getBytes()); 
        } catch (Exception e) {
            e.printStackTrace();
        }
        return byteToHex(cipherMsg); //byte->str
    }

 

 

복호화(공개키사용)

public static String decrypt(String cipher1) {
        byte[] plainMsg = new byte[1024];
        try {
            cipher.init(Cipher.DECRYPT_MODE, publicKey);//공개키로복호화
            plainMsg = cipher.doFinal(hexToByte(cipher1.trim()));//str->byte
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new String(plainMsg).trim();
    }

 

 

공개키로 암호화 -> 개인키로 복호화

개인키로 암호화-> 공개키로 복호화

의 키값-쌍 객체이다