[Java/자바] RSA 공개키(publicKey)/개인키(privateKey) 생성 및 파일 추출

 

RSA란?
  • 현재 SSL/TLS에 가장 많이 사용되는 공개키 암호화 알고리즘
  • 공개키와 개인키가 한 쌍을 이룬다
  • 공개키로 암호화한 내용은 개인키로, 개인키로 암호화한 내용은 공개키로 해독
  • RSA 공개키 암호화 방식은 AES 대칭키 암호화 방식에 비해 속도가 느린 단점이 있으나, 보안에 더 강점을 갖는다

 

Java에서 key 생성 및 바이너리 파일 저장
package com.test.util;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.*;
import java.util.Base64;

public class RSAUtill {

    public static void main(String[] args) throws Exception {
        generateRsaKeyPair();
    }

    /**
     * RSA 키쌍 (private key, public key) 생성
     */
    private static void generateRsaKeyPair() throws NoSuchAlgorithmException {

        // RSA 키쌍을 생성
        KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
        generator.initialize(2048);
        KeyPair pair = generator.generateKeyPair();


        // publicKey 획득
        PublicKey publicKey = pair.getPublic();
        System.out.printf("-----BEGIN PUBLIC KEY-----\n%s\n-----END PUBLIC KEY-----\n",
                Base64.getEncoder().encodeToString(publicKey.getEncoded()));
		
	// publicKey 바이너리 파일로 저장
        try (FileOutputStream fos = new FileOutputStream("public.key")) {
            fos.write(publicKey.getEncoded());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


        // privateKey 획득
        PrivateKey privateKey = pair.getPrivate();
        System.out.printf("-----BEGIN PRIVATE KEY-----\n%s\n-----END PRIVATE KEY-----\n",
                Base64.getEncoder().encodeToString(privateKey.getEncoded()));

	// privateKey 바이너리 파일로 저장
        try (FileOutputStream fos = new FileOutputStream("private.key")) {
            fos.write(privateKey.getEncoded());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

 

  • base64 encoding key 출력 확인

 

  • key 파일 생성 확인

 

 

RSA Key 생성 사이트

http://tomorrow99.woobi.co.kr/en/teacher/interactives/rsa-key-generator/