내부망 자동화의 벽: PDF 암호화와 변환 자동화 실패기

소개

업체에 문서를 보낼 때, 개인정보보호법에 따라 PDF 파일에 암호를 설정해야 하는 상황이었습니다. 동시에 외부 업체로부터 받은 Word 문서를 다시 PDF로 변환해야 하는 작업도 반복적으로 발생했죠.

이 번거로운 과정을 자동화하기 위해, 폴더 내 Word 파일을 자동으로 PDF로 변환하고, PDF 파일에는 자동으로 암호를 거는 자동화 프로세스를 만들고자 했습니다.

진행 방법

사용한 도구

  • Python (순수 내장 모듈만 사용)

  • 내부망 시스템 환경: NASKA(나스카) 보안망

외부 wheel 설치나 AI 도구 사용이 전면 차단된 환경이었기 때문에, PyPDF2, docx2pdf 등 외부 라이브러리는 사용할 수 없었습니다. 🧱

구현 방식

  • RC4 암호화 알고리즘을 직접 구현하여 PDF 파일에 암호를 설정

  • PDF 내부 구조를 직접 파싱하고, /Encrypt 오브젝트 및 트레일러 수정을 통해 암호화 적용

  • 일괄 처리(batch) 기능도 추가하여, 폴더 내의 PDF를 순차적으로 암호화

  • 디버깅 로그 출력 기능 포함 (파일 크기, 헤더 분석 등)

주요 코드 예시

# ==================== RC4 암호화 ====================
class RC4:
    def __init__(self, key):
        self.S = list(range(256))
        j = 0
        for i in range(256):
            j = (j + self.S[i] + key[i % len(key)]) % 256
            self.S[i], self.S[j] = self.S[j], self.S[i]

    def encrypt(self, data):
        S = self.S.copy()
        i = j = 0
        result = bytearray()
        for byte in data:
            i = (i + 1) % 256
            j = (j + S[i]) % 256
            S[i], S[j] = S[j], S[i]
            k = S[(S[i] + S[j]) % 256]
            result.append(byte ^ k)
        return bytes(result)

전체 코드는 다음 구성으로 되어 있습니다:

  • PDF 암호화 키 생성 함수

  • Encrypt 오브젝트 생성 함수

  • PDF 분석 및 암호화 적용 함수

  • 폴더 내 PDF 일괄 처리 함수 (process_folder)

  • CLI 입력 및 테스트 모드 지원 (main())

결과와 배운 점

  • 실패 원인: 자동화 로직 자체는 완성되었고, 순수 파이썬만으로도 PDF 암호화까지 구현했지만, 내부망 보안체계(NASKA)가 PDF 암호화된 파일의 접근 자체를 막아버림

  • AI 도구뿐 아니라 외부 패키지 설치조차 불가한 환경에서 삽질 3일차에 현실을 깨달음 😢

  • 디버깅 로그 및 구조 분석까지 치밀하게 설계했으나, "열 수 없는 파일"이라는 결과로 귀결됨

배운 점

  • 내부망 환경에서는 일반적인 자동화 솔루션이 통하지 않는다는 점을 절실히 느낌

  • 순수 Python만으로도 PDF 암호화는 구현할 수 있다는 사실 자체는 흥미로운 발견

  • 다음 시도는 엑셀 매크로나 Visual Basic 기반의 더 제한된 환경 친화적 방식으로 접근할 예정

  • 내부망이 아닌 환경이라면 이 자동화는 쉽게 구현 가능함 💡

도움 받은 글 (선택)

  • 없음 (직접 구현 및 디버깅 위주로 진행)

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요