조정밍
JM IT BLOG
조정밍
전체 방문자
오늘
어제
  • 분류 전체보기 (37)
    • Web (8)
      • Server (4)
      • Spring (2)
    • JavaScript (6)
    • Database (1)
    • Java (5)
    • Cryptography (8)
    • Network (1)
    • Reverse (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • react
  • 블록암호
  • @Builder
  • Dynamic Library Link
  • 정적라이브러리
  • Base64 #인코딩
  • Gradle
  • ln 명령어
  • 빌드도구
  • 빌터패턴
  • JSONParser
  • 대칭키암호
  • JSX
  • 공개키 암호 알고리즘
  • RSA 알고리즘 구현
  • dll
  • ln -s
  • nullish
  • RSA 암호화
  • Gson

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
조정밍

JM IT BLOG

RSA 암호화
Cryptography

RSA 암호화

2020. 1. 13. 19:35

RSA

RSA 암호는 공개키 암호 알고리즘 중의 하나로, 암호화뿐만 아니라 전자서명이 가능한 최초의 알고리즘으로 알려져 있다.

RSA 암호체계의 안전성은 큰 숫자를 소인수 분해하는 것이 어렵다는 것에 기반을 두고 있다.

공개키(Public Key)와 개인키(Private Key)를 사용하며, 이 두개의 키로 암호화와 복호화를 진행한다.

 

RSA 알고리즘 진행 방식

Server와 Client를 예로 설명

1. S는 공개키와 개인키를 만들어 C에게 공개키를 보낸다.

2. C는 S로 부터 받은 공개키로 보낼 정보를 암호화 한다.

3. S는 개인키로 받은 정보를 복호화 한다.

 

RSA 알고리즘 구현

1. keyPair 생성

1024, 2048bit 등을 선택하여 keyPair를 생성한다.

public static KeyPair makeKeyPair() throws NoSuchAlgorithmException {

    SecureRandom secureRandom = new SecureRandom();

    KeyPairGenerator gen;

    gen = KeyPairGenerator.getInstance("RSA");

    gen.initialize(1024, secureRandom);

    KeyPair keyPair = gen.genKeyPair();

    return keyPair;
}

2. 공개키, 개인키 가져오기

생성한 keyPair에서 공개키와 개인키를 가져온다.

KeyPair keyPair = CipherUtil.makeKeyPair();

PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();

3. 공개키로 암호화 

암호화할 문자열을 공개키로 암호화 한다.

String plainText = "plainText";
String encrypted = CipherUtil.encryptRSA(plainText, publicKey);

4. 개인키로 복호화

String decrypted = CipherUtil.decryptRSA(encrypted, privateKey);

5. 공개키/개인키 Base64 인코딩

byte[] bytePublicKey = publicKey.getEncoded();
String base64PublicKey = Base64.getEncoder().encodeToString(bytePublicKey);

byte[] bytePrivateKey = privateKey.getEncoded();
String base64PrivateKey = Base64.getEncoder().encodeToString(bytePrivateKey);

 

6. 사이트 테스트

자바로 만든 Base64 키값

사이트로 암복호화 해보기

 

Refernece

  • https://www.devglan.com/online-tools/rsa-encryption-decryption
  • https://offbyone.tistory.com/346

'Cryptography' 카테고리의 다른 글

DLL ( Dynamic Link Library)  (0) 2020.03.16
DES (Data Encryption Standard)  (0) 2020.01.29
Unicode  (0) 2020.01.12
ASCII Code  (0) 2020.01.12
Base64 인코딩  (0) 2020.01.10
    'Cryptography' 카테고리의 다른 글
    • DLL ( Dynamic Link Library)
    • DES (Data Encryption Standard)
    • Unicode
    • ASCII Code
    조정밍
    조정밍

    티스토리툴바