부트캠프(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();
}