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 |