본문 바로가기

jsp

파일 암호화: 파일을 암호화하고 복호화하는 방법을 학습하는 예제.

반응형

파일 암호화는 중요 데이터를 보호하기 위해 파일 내용을 읽을 수 없는 형태로 변환하는 과정입니다. 복호화는 암호화된 데이터를 원래의 형태로 되돌리는 반대 과정입니다. Java에서는 Cipher 클래스와 같은 보안 기능을 사용하여 파일 암호화 및 복호화를 수행할 수 있습니다. 다음은 파일을 암호화하고 복호화하는 두 가지 예제입니다.

예제 1: 파일 암호화

이 예제는 주어진 파일을 암호화하는 방법을 보여줍니다.

encryptFile.jsp

<%@ page import="java.io.*,javax.crypto.*,javax.crypto.spec.*"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    // 암호화에 사용될 키를 설정합니다.
    // 실제 응용 프로그램에서는 더 강력한 키를 생성하고 안전하게 저장해야 합니다.
    String key = "This is a secret";
    File inputFile = new File("document.txt");
    File encryptedFile = new File("document.encrypted");

    try {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128); // 128, 192 or 256 bits
        SecretKey secretKey = keyGenerator.generateKey();
        
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);

        FileInputStream inputStream = new FileInputStream(inputFile);
        byte[] inputBytes = new byte[(int) inputFile.length()];
        inputStream.read(inputBytes);

        byte[] outputBytes = cipher.doFinal(inputBytes);

        FileOutputStream outputStream = new FileOutputStream(encryptedFile);
        outputStream.write(outputBytes);

        inputStream.close();
        outputStream.close();

        out.println("File successfully encrypted!");
        out.println("New File: " + encryptedFile.getPath());
    } catch (Exception e) {
        e.printStackTrace();
    }
%>

예제 2: 파일 복호화

이 예제는 암호화된 파일을 복호화하는 방법을 보여줍니다.

decryptFile.jsp

<%@ page import="java.io.*,javax.crypto.*,javax.crypto.spec.*"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    // 암호화와 동일한 키를 사용합니다.
    // 암호화된 파일과 동일한 방식으로 키를 가져와야 합니다.
    File encryptedFile = new File("document.encrypted");
    File decryptedFile = new File("document.decrypted");

    try {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128); // 동일한 키 크기 사용
        SecretKey secretKey = keyGenerator.generateKey();
        
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);

        FileInputStream inputStream = new FileInputStream(encryptedFile);
        byte[] inputBytes = new byte[(int) encryptedFile.length()];
        inputStream.read(inputBytes);

        byte[] outputBytes = cipher.doFinal(inputBytes);

        FileOutputStream outputStream = new FileOutputStream(decryptedFile);
        outputStream.write(outputBytes);

        inputStream.close();
        outputStream.close();

        out.println("File successfully decrypted!");
        out.println("New File: " + decryptedFile.getPath());
    } catch (Exception e) {
        e.printStackTrace();
    }
%>

관련 전문용어 설명

  • 암호화(Encryption): 데이터를 안전하게 보호하기 위해 읽을 수 없는 형태로 변환하는 과정입니다.
  • 복호화(Decryption): 암호화된 데이터를 원래의 형태로 되돌리는 과정입니다.
  • Cipher: Java에서 제공하는 암호화 및 복호화 기능을 수행하는 클래스입니다.
  • SecretKey: 암호화와 복호화에 사용되는 비밀 키입니다.
반응형