PDF에는 열기 암호(사용자 암호)와 권한 암호(소유자 암호) 두 가지가 있습니다. 이 도구는 열기 암호 없이 바로 열리는 파일의 소유자 암호 제한을 풀어, 인쇄·복사·수정이 가능한 PDF로 다시 만듭니다. 파일 구조와 암호화 사전을 직접 읽고, 스트림과 문자열을 복호화한 뒤 암호화가 없는 PDF로 다시 씁니다. 열기 암호가 걸린 파일은 처리하지 않고 이유를 알려 줍니다.
회원가입 없이 브라우저에서 바로 사용할 수 있습니다.
바로 답
PDF 암호는 두 종류입니다. 열기 암호(사용자 암호)는 파일을 열 때 묻는 비밀번호이고, 소유자 암호(권한 암호)는 파일은 바로 열리지만 인쇄·복사·수정이 막히는 설정입니다. 이 도구는 소유자 암호만 걸린 파일의 제한을 풀어 암호화가 없는 PDF로 다시 씁니다. 열기 암호가 걸린 파일은 비밀번호를 알아도 처리하지 않습니다.
근거: 이 도구의 복호화 코드를 qpdf와 pypdf로 만든 암호화 샘플 8종에 실행하고, 결과를 qpdf --check와 pypdf 텍스트 추출로 다시 확인했습니다(2026-11-05, 아래 표).
처리 단계 (코드에 적힌 순서)
상호 참조 읽기 — 파일 끝의 startxref부터 trailer 또는 상호 참조 스트림을 따라가 객체 위치를 모읍니다. 여러 번 저장된 파일은 /Prev 사슬을 최신부터 거슬러 읽습니다.
암호화 사전 확인 — /Filter가 /Standard인지 확인하고 /V(버전)·/R(리비전)·/Length(키 길이)·/P(권한)·/O·/U(검증값)를 읽습니다.
빈 사용자 암호 검증 — 암호가 비어 있는지 ISO 32000의 키 유도(리비전 2~4는 MD5+RC4, 5~6은 SHA-2·AES 기반)로 검사합니다. 통과하지 못하면 여기서 멈추고 "열기 암호가 필요하다"고 알립니다.
다시 쓰기 — 객체 스트림(/ObjStm)을 풀어 평면 객체로 만들고, 암호화 사전과 상호 참조 스트림을 뺀 새 PDF를 씁니다. 페이지 수는 결과를 pdf-lib로 다시 열어 확인합니다.
실제 샘플 3종 처리 결과 (2026-11-05 측정)
같은 도구로 처리한 결과
샘플
암호화
페이지
처리 전
처리 후
걸린 시간
결과 검증
스캔본 모양(사진 2장)
AES-256 · R6
2장
7,341바이트
7,268바이트
412ms
qpdf --check 정상 · 안에 든 JPEG가 정상 이미지(320×168)로 복원
보고서 모양(글자·표 3장)
AES-256 · R6
3장
4,353바이트
6,144바이트
261ms
qpdf --check 정상 · pypdf로 글자 추출 확인
옛 전자문서 모양(1장)
RC4 · R3 128비트
1장
1,730바이트
2,314바이트
11ms
qpdf --check 정상 · pypdf로 글자 추출 확인
세 샘플 모두 인쇄·복사·수정·주석·양식·조립·고해상도 인쇄가 막혀 있었고, 처리 후에는 암호화 사전이 남지 않았습니다. 보고서 샘플의 용량이 늘어난 것은 원본이 객체 스트림으로 압축돼 있었는데 결과는 평면 객체로 다시 쓰기 때문입니다. 스캔본은 용량이 거의 그대로인데, 사진 데이터가 이미 압축된 JPEG라 구조를 바꿔도 총량이 비슷하기 때문입니다. 측정 환경은 macOS(Apple M5), Node.js 26.4.0에서 같은 코드를 실행한 값입니다.
암호화 방식별 검증 (샘플 8종)
방식별 판별·복호화 결과
만든 도구
암호화
판별
복호화
결과 확인
pypdf
RC4 40비트 (R2)
RC4 · R2 · 40비트
성공
2장 · 글자 확인
pypdf
RC4 128비트 (R3)
RC4 · R3 · 128비트
성공
2장 · 글자 확인
pypdf
AES-128 (R4)
AES-128 · R4 · 128비트
성공
2장 · 글자 확인
pypdf
AES-256 (R6)
AES-256 · R6 · 256비트
성공
2장 · 글자 확인
qpdf(객체 스트림)
RC4 40비트 (R2)
RC4 · R2 · 40비트
성공
2장 · 글자 확인
qpdf(객체 스트림)
RC4 128비트 (R3)
RC4 · R3 · 128비트
성공
2장 · 글자 확인
qpdf(객체 스트림)
AES-128 (R4)
AES-128 · R4 · 128비트
성공
2장 · 글자 확인
qpdf(객체 스트림)
AES-256 (R6)
AES-256 · R6 · 256비트
성공
2장 · 글자 확인
여기에 열기 암호를 건 샘플 2종(AES-256)을 더해 "처리하지 않음"으로 판정되는지도 확인했습니다. 두 파일 모두 도구가 처리 버튼을 열지 않고 이유를 표시합니다. 저장소의 test/pdfSecurity130.test.js가 이 항목들을 매번 다시 검사합니다.
결과에서 달라지는 것
암호화가 완전히 빠집니다 — 결과 PDF에는 /Encrypt가 없습니다. 원본과 따로 보관하세요.
객체 구조가 바뀝니다 — 객체 스트림이 평면 객체로 풀리고, 상호 참조는 표 형식으로 다시 씁니다. 그래서 원본과 바이트가 같지 않고 용량도 달라집니다.
전자서명 검증이 무효가 됩니다 — 서명은 문서 전체 바이트에 묶여 있으므로 결과에서는 검증되지 않습니다.
증분 저장 이력이 사라집니다 — 최신 상호 참조가 가리키는 객체만 남기고 다시 쓰기 때문입니다.
페이지 내용은 그대로입니다 — 복호화된 글자·이미지·벡터가 그대로 남습니다. 스캔 샘플의 JPEG가 유효한 이미지로 나오는 것을 확인했습니다.
처리하지 않는 파일
열기 암호가 걸린 파일 — 비밀번호를 묻지도, 추측하지도 않습니다. 파일을 열 수 있는 권한이 먼저 있어야 합니다.
인증서 기반 보안(/Adobe.PubSec 등) — /Filter가 /Standard가 아니면 이유를 알려 주고 멈춥니다.
구조가 손상된 파일 — 상호 참조 정보를 읽지 못하면 결과를 만들지 않습니다. 뷰어가 복구해서 열어 주더라도 이 도구는 실패로 알립니다.
40MB 초과 파일 — 브라우저 메모리 보호를 위해 이 도구에 설정한 상한입니다. 브라우저 한도를 측정한 값은 아닙니다.
이 도구의 한계 (숨기지 않고 적습니다)
암호를 푸는 것이 아니라 이미 열리는 파일의 권한 설정을 없애는 도구입니다. 모르는 비밀번호를 찾아 주지 않습니다.
권한 플래그를 무시하는 뷰어도 있어, 권한이 걸려 있어도 열람·인쇄가 되는 경우가 있습니다. 반대로 이 도구로 만든 결과를 조직의 보안 정책이 막을 수도 있습니다.
처리는 한 파일씩 합니다. 여러 파일을 한 번에 돌리는 기능은 없습니다.
결과 검증은 페이지 수와 구조 검사까지입니다. 인쇄 결과의 색·여백까지 보증하지 않습니다.
최종 확인 2026-11-05. 실행 결과는 같은 날 이 사이트 주소와 이 저장소의 코드로 얻은 값입니다.
도구 사용
입력·계산·미리보기 같은 대화형 기능을 사용하려면 JavaScript를 켜 주세요. 아래 사용 방법과 입력 처리 안내는 로그인 없이 읽을 수 있습니다.
이 도구가 하는 일
PDF의 암호는 두 종류입니다. 열기 암호는 파일을 열 때 묻는 비밀번호이고, 권한 암호는 파일은 열리지만 인쇄·복사·수정이 막히는 설정입니다. 이 도구는 뒤쪽, 즉 열기 암호가 비어 있는 파일의 권한 제한을 풉니다.
처리 순서는 이렇습니다. ① 파일의 상호 참조 표(또는 상호 참조 스트림)와 trailer를 읽어 암호화 사전을 찾습니다. ② 표준 보안 핸들러의 값을 이용해 빈 사용자 암호가 통과하는지 확인합니다. ③ 통과하면 객체마다 스트림과 문자열을 복호화합니다. ④ 객체 스트림(/ObjStm)을 풀어 평면 객체로 만들고, 암호화 사전이 없는 새 PDF를 씁니다. 모든 과정이 브라우저 안에서 끝납니다.
처리하지 않는 것
열기 암호가 걸린 파일 — 비밀번호를 몰라도 되는 파일만 다룹니다. 추측 시도도 하지 않습니다.
인증서 보안 — /Filter 가 /Standard 가 아닌 파일은 이유를 알려 주고 멈춥니다.
손상된 파일 — 상호 참조 정보를 읽지 못하면 결과를 만들지 않습니다.
결과에서 달라지는 것
암호화가 빠지고, 객체 스트림이 평면 객체로 풀리며, 상호 참조는 표 형식으로 다시 쓰입니다. 그래서 원본과 바이트가 같지 않고 용량도 조금 달라집니다. 페이지 내용·글자·이미지는 복호화된 그대로 남습니다. 전자서명은 문서 전체 바이트에 묶여 있으므로 결과에서 검증이 무효가 됩니다.
처리 전에 확인할 것
이 문서를 내가 소유했는지, 또는 인쇄·복사 권한을 가졌는지 확인합니다.
원본을 따로 보관합니다. 결과 PDF는 암호화가 없으므로 공유 범위를 스스로 정해야 합니다.
결과를 열어 마지막 페이지까지 확인합니다. 표의 페이지 수는 결과를 다시 읽어 센 값입니다.
권한만 먼저 확인하려면
제한을 풀기 전에 어떤 항목이 막혀 있는지 보고 싶다면 PDF 권한·암호 확인을 쓰세요. 파일을 고치지 않고 암호화 방식과 권한 플래그 8종만 읽습니다. 두 암호의 차이와 실패 원인은 PDF 비밀번호 두 종류 가이드에 정리했습니다.
자주 묻는 질문
PDF 암호 해제는 무료인가요?
무료이고 회원가입이 없습니다. 파일 한 개씩 처리하며 파일당 40MB까지 받습니다. 이 상한은 브라우저 메모리 보호를 위해 이 도구에 설정한 값입니다.
파일이 서버로 올라가나요?
아니요. 파일을 읽고 복호화하고 다시 쓰는 일이 모두 브라우저 메모리에서 일어납니다. 처리 중 서버로 나가는 요청은 0건임을 개발자도구 네트워크 탭에서 확인할 수 있습니다.
열 때 비밀번호를 묻는 PDF도 풀리나요?
아니요. 여는 암호(사용자 암호)가 걸린 파일은 이 도구가 처리하지 않습니다. 그런 파일은 먼저 파일을 열 수 있는 권한이 있어야 하고, 이 도구는 비밀번호를 추측하지 않습니다.
어떤 암호화 방식을 지원하나요?
PDF 표준 보안 핸들러(/Standard)의 RC4 40·128비트, AES-128(R4), AES-256(R5·R6)을 지원합니다. 인증서 기반 보안(/Adobe.PubSec 등 표준이 아닌 핸들러)은 지원하지 않습니다.
결과 PDF에서 달라지는 것은 무엇인가요?
암호화 사전이 빠지고 스트림·문자열이 평문으로 다시 쓰입니다. 객체 스트림은 평면 객체로 풀리므로 파일 구조가 달라지고, 선형화 정보와 전자서명 검증은 사라집니다. 페이지 내용과 글자는 그대로입니다.
이 도구는 비밀번호를 찾아 주나요?
아니요. 열기 암호가 걸린 파일은 처리하지 않고 이유만 알려 줍니다. 암호 추측이나 무차별 대입 기능은 없습니다.
AES-256 파일도 처리되나요?
됩니다. 2026-11-05 측정에서 AES-256(R6) 샘플 2종과 다른 방식 6종, 모두 복호화 후 페이지와 글자가 그대로 남았습니다.
처리 결과가 원본과 용량이 다른 이유는 무엇인가요?
결과는 평면 객체로 다시 쓰고 상호 참조를 표로 새로 만들기 때문입니다. 보고서 샘플은 4,353→6,144바이트로 늘고, 이미 압축된 사진 위주 스캔본은 7,341→7,268바이트로 거의 같았습니다.
전자서명이 있는 문서에 써도 되나요?
서명 검증이 무효가 됩니다. 서명이 필요한 문서는 원본을 그대로 두고, 이 도구는 열람·인쇄용 사본을 만들 때만 쓰세요.
결과를 다시 암호로 보호할 수 있나요?
이 도구는 암호를 새로 걸지 않습니다. 결과 PDF는 암호화가 없으므로, 보관·전송 구간의 보호는 압축 파일 암호나 저장소 권한 같은 다른 수단으로 해야 합니다.