반응형
RSA를 이용한 데이터 암복호화
키발급부터 개인키로 암호화(전자서명) 한 후 공개키로 복호화는 과정입니다.
public static void main(String[] args){
/* server code */
/* Key 발급 */
PublicKey publicKey = null; // 공개키
PrivateKey privateKey = null; // 개인키
SecureRandom secureRandom = new SecureRandom(); // random number generator(RNG)
try {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); // RSA(1024, 2048), DiffieHellman(1024)
keyPairGenerator.initialize(1024, secureRandom);
KeyPair keyPair = keyPairGenerator.generateKeyPair(); // generate key pair
publicKey = keyPair.getPublic();
privateKey = keyPair.getPrivate();
System.out.println(publicKey.getAlgorithm());
System.out.println(publicKey.getFormat()); // 공개키 표준
System.out.println(publicKey.toString());
System.out.println();
System.out.println(privateKey.getAlgorithm());
System.out.println(privateKey.getFormat()); // 개인키 표준
System.out.println(privateKey.toString());
String publicKeyStr = Base64.getEncoder().encodeToString(publicKey.getEncoded()); // Base64 인코딩
String privateKeyStr = Base64.getEncoder().encodeToString(privateKey.getEncoded()); // Base64 인코딩
System.out.println(privateKeyStr);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
/* 키발급 종료 */
/* client code */
String plainText = "hello world!";
String encryptedText = "";
String decryptedText = "";
try {
Cipher cipher = Cipher.getInstance("RSA");
// 개인키 이용 전자서명
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
encryptedText = Base64.getEncoder().encodeToString(cipher.doFinal(plainText.getBytes()));
System.out.println("****encrypt****");
System.out.println(encryptedText);
System.out.println("****decrypt****");
cipher.init(Cipher.DECRYPT_MODE, publicKey);
// 공개키 이용 복호화
decryptedText = new String(cipher.doFinal(Base64.getDecoder().decode(encryptedText.getBytes())));
System.out.println(decryptedText);
} catch (NoSuchAlgorithmException | NoSuchPaddingException |InvalidKeyException |IllegalBlockSizeException | BadPaddingException e) {
e.printStackTrace();
}
}
반응형
'프로그래밍 노트 > JAVA' 카테고리의 다른 글
[JAVA] 컬렉션프레임워크(CollectionFramework) 1 (0) | 2018.07.02 |
---|---|
[JAVA] JVM 메모리구조 (0) | 2018.06.29 |
[JAVA] Comparable, Comparator 정렬 (0) | 2018.04.09 |
[JAVA] 명명규칙 (0) | 2018.04.08 |
[JAVA]Jave SE, Java EE, Java ME (0) | 2018.02.26 |