41. 자바와 암호화
41.1. 암호화 개요
암호화는 데이터를 보호하기 위해 사용되는 기술로, 텍스트나 데이터를 암호화된 형태로 변환하여 원본 데이터를 보호합니다. 암호화된 데이터는 복호화 과정을 거쳐 원본 데이터로 복원할 수 있습니다. 암호화 기술은 대칭키 암호화, 비대칭키 암호화, 해시 함수 등 다양한 방식이 존재합니다.
41.2. 자바에서 제공하는 암호화 라이브러리
자바는 다양한 암호화 기술을 지원하기 위해 Java Cryptography Architecture (JCA) 및 Java Cryptography Extension (JCE)를 제공합니다. 이를 활용하여 대칭키 암호화, 비대칭키 암호화, 해시 함수 등을 사용할 수 있습니다.
41.3. 대칭키 암호화와 비대칭키 암호화
- 대칭키 암호화: 암호화와 복호화에 동일한 키를 사용하는 방식입니다. 예를 들어, AES(Advanced Encryption Standard)가 대표적인 대칭키 암호화 알고리즘입니다.
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;
public class SymmetricEncryptionExample {
public static void main(String[] args) throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey = keyGenerator.generateKey();
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedData = cipher.doFinal("Hello, world!".getBytes());
System.out.println("Encrypted data: " + Base64.getEncoder().encodeToString(encryptedData));
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
System.out.println("Decrypted data: " + new String(decryptedData));
}
}
- 비대칭키 암호화: 암호화와 복호화에 서로 다른 키를 사용하는 방식입니다. 공개키와 개인키의 쌍으로 구성되며, RSA 알고리즘이 대표적입니다.
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;
public class AsymmetricEncryptionExample {
public static void main(String[] args) throws Exception {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = cipher.doFinal("Hello, world!".getBytes());
System.out.println("Encrypted data: " + Base64.getEncoder().encodeToString(encryptedData));
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
System.out.println("Decrypted data: " + new String(decryptedData));
}
}
41.4. 해시 함수와 메시지 다이제스트
해시 함수는 데이터를 고정 길이의 고유한 값으로 변환하는 기술입니다. 이 과정에서 데이터의 무결성을 확인할 수 있습니다. MD5, SHA-1, SHA-256 등이 해시 함수의 예입니다. 자바에서는 MessageDigest 클래스를 사용하여 해시 값을 생성할 수 있습니다.
import java.security.MessageDigest;
public class HashFunctionExample {
public static void main(String[] args) throws Exception {
String data = "Hello, world!";
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
byte[] hash = messageDigest.digest(data.getBytes());
System.out.println("Hashed data: " + bytesToHex(hash));
}
private static String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
}
위 예제에서는 SHA-256 해시 알고리즘을 사용하여 문자열을 해시 값으로 변환했습니다. 이를 통해 데이터의 무결성을 확인할 수 있습니다. 자바의 암호화 기능을 활용하면 다양한 암호화 및 해시 알고리즘을 사용하여 데이터 보호를 할 수 있습니다. 이를 통해 보안이 중요한 애플리케이션을 개발할 수 있습니다.
반응형
'GD's IT Lectures : 기초부터 시리즈 > 자바(JAVA) 기초부터 ~' 카테고리의 다른 글
[자바(JAVA)] 자바와 웹 서비스 (0) | 2023.04.30 |
---|---|
[자바(JAVA)] 기타 자바 라이브러리 및 유용한 도구 (0) | 2023.04.30 |
[자바(JAVA)] 자바와 네트워킹 (0) | 2023.04.30 |
[자바(JAVA)] 자바와 디자인 패턴 (0) | 2023.04.30 |
[자바(JAVA)] 자바의 동시성과 병렬 처리 (0) | 2023.04.30 |
댓글