ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PDF 암호 해제, 미리보기로 다시 저장해도 안 풀린다
    외주개발 2026. 10. 25. 08:53
    반응형

    카드 명세서를 받으면 열 때마다 생년월일을 넣어야 해서 PDF 암호 해제를 하려고 했다.

    미리보기로 열고 파일 → 내보내기로 새로 저장했다. 그런데 그 파일도 그대로 잠겨 있었다. 암호화 True.

    먼저 적어둘 게 있다. 이 글은 암호를 모르는 파일을 여는 글이 아니다. 내가 아는 암호를 안 묻게 바꾸는 쪽이다. 암호를 모르면 여기 적힌 건 하나도 안 된다.

    암호가 두 종류다

    이걸 구분 안 하면 방법을 잘못 고른다.

    두 PDF의 암호화 여부와 인쇄 복사 권한을 터미널에서 확인한 결과

    위가 열람 암호다. 열람잠김 True. 암호를 넣기 전에는 내용 자체를 못 본다. 카드사·보험사가 보내는 게 보통 이쪽이다.

    아래가 권한 암호다. 열람잠김 False인데 암호화는 True다. 그냥 열리는데 인쇄와 복사가 막혀 있다. 계약서나 제안서에 걸려 오는 게 이쪽이다.

    "암호가 걸렸다"는 말이 이 둘을 다 가리켜서, 검색해 나온 방법이 내 경우에 안 맞는 일이 생긴다.

    아래에 이런 걸 적었다

    · 다시 저장이 왜 안 되나
    · 쪽을 옮기면 풀린다
    · 암호를 모를 때
    · 걸고 싶을 때

    필요한 데로 내려가면 됨

    열면 이렇게 나온다

    미리보기에서 암호 걸린 PDF를 열었을 때 나오는 자물쇠 화면

    열람 암호가 걸린 파일을 미리보기로 열면 이 화면이 나온다. 암호를 넣으면 그 창에서는 보인다.

    문제는 그다음이다. 창을 닫고 다시 열면 또 묻는다. 파일 자체는 그대로다.

    내보내기로 저장해도 안 풀린다

    여기가 내가 시간을 쓴 부분이다. 암호를 넣어서 연 다음 파일 → 내보내기로 새 파일을 만들었다.

    미리보기 내보내기로 저장한 파일도 여전히 암호화 True로 나오는 결과

    새로 만든 파일인데 암호화 True고 인쇄도 False 그대로다. 권한이 통째로 따라왔다.

    명령으로 열어서 그대로 다시 저장해도 똑같다.

    PDF를 열어 그대로 다시 저장해도 암호화가 유지되는 결과

    저장이라는 동작이 문서에 붙은 보안 설정까지 같이 들고 가기 때문이다. 내용만 베껴 적는 게 아니다.

    그래서 "미리보기로 다시 저장하면 풀린다"고 적힌 글을 따라 하면 풀린 것처럼 보이는데, 닫았다 열면 또 묻는다. 확인을 안 하면 모르고 지나간다.

    쪽을 새 문서로 옮기면 풀린다

    설정을 떼어내려면 빈 문서를 하나 만들고 거기로 쪽만 옮기면 된다. 새 문서에는 원래 보안 설정이 없다.

    import sys
    from Foundation import NSURL
    import Quartz
    
    src, out = sys.argv[1], sys.argv[2]
    pw = sys.argv[3] if len(sys.argv) > 3 else None
    
    doc = Quartz.PDFDocument.alloc().initWithURL_(NSURL.fileURLWithPath_(src))
    if doc.isLocked():
        if not pw or not doc.unlockWithPassword_(pw):
            sys.exit("암호가 틀렸다. 모르면 여기서 끝이다.")
    
    new = Quartz.PDFDocument.alloc().init()        # 새 문서로 쪽을 옮긴다
    for i in range(doc.pageCount()):
        new.insertPage_atIndex_(doc.pageAtIndex_(i), new.pageCount())
    new.writeToFile_(out)
    
    chk = Quartz.PDFDocument.alloc().initWithURL_(NSURL.fileURLWithPath_(out))
    print(f"{out}  {chk.pageCount()}쪽  암호화 {chk.isEncrypted()}")

    pdfunlock.py 로 저장하고 부른다. 열람 암호가 걸린 파일이면 뒤에 암호를 하나 더 붙인다.

    쪽을 새 문서로 옮겨 암호화 False가 된 결과

    암호화 False. 인쇄와 복사도 풀린다.

    암호를 푼 PDF가 미리보기에서 바로 열리는 화면

    연 모습이다. 자물쇠 화면 없이 바로 뜬다.

    맥 기본 파이썬에는 이걸 돌릴 모듈이 없다. /usr/bin/python3 은 3.9.6인데 Quartz가 빠져 있어서 pip3 install pyobjc-framework-Quartz 를 한 번 해야 한다.

    암호를 모르면 거기서 끝이다

    암호 없이 돌려봤다.

    암호 없이 실행했을 때 중단되는 터미널 출력

    열람 암호가 걸린 파일은 내용 자체가 암호화돼 있어서, 암호 없이는 쪽을 꺼낼 수가 없다. 올려서 풀어 준다는 사이트도 같은 벽을 만난다.

    받은 파일인데 암호를 모르면 보낸 쪽에 묻는 게 맞다. 카드사·보험사는 보통 안내문에 규칙이 적혀 있다. 생년월일 여섯 자리, 주민번호 앞자리, 휴대폰 뒷자리 같은 식이다.

    권한 암호를 보안이라고 믿지 않는다

    받는 쪽에서 인쇄나 복사를 못 하게 거는 게 권한 암호다. 미리보기 내보내기 창 아래쪽에 권한 버튼이 있다.

    그런데 위에서 본 대로다. 쪽을 새 문서로 옮기면 그냥 풀린다. 내가 건 게 아니라 받은 파일에서도 풀렸다.

    실수로 퍼지는 걸 줄이는 정도지 막는 장치가 아니다. 거는 쪽이든 받는 쪽이든 이걸 보안이라고 생각하면 안 된다.

    진짜로 안 나가야 하는 내용이면 파일을 보내지 않는 쪽을 생각하는 게 맞다.

    정리

    어느 쪽 암호인지 먼저 본다. 열 때 묻는 건 열람 암호, 그냥 열리는데 인쇄가 막히면 권한 암호다.

    다시 저장으로는 안 풀린다. 저장한 파일을 닫았다 다시 열어서 확인한다.

    쪽을 새 문서로 옮기면 풀린다. 그게 이 글의 전부다.

    암호를 모르면 안 된다. 보낸 쪽에 묻는다.

    같은 파일을 자르거나 합치는 건 이쪽과 이쪽에 있다. 용량이 커서 안 올라가는 거면 여기를 보면 된다.

    새로 저장한 파일을 한 번도 안 열어봤으면 아직 풀린 게 아니다.

    반응형
소개 · 연락처 · 개인정보처리방침
운영 프리시 · 상호 앤디 · 대표 손영은 · 사업자등록번호 708-38-01407
경기도 안산시 상록구 해안로 705, 3동 1층 107호 · admin@freesi.net
Designed by Tistory.