2017-09-15 1 views
0

iTextsharp 라이브러리를 사용하여 PDF 파일을 보호하려면 다음 코드를 사용하고 있습니다. 그것은 또한 "짧은"암호를 작동긴 암호로 PDF 파일을 보호하는 iTextsharp

public Boolean ProtectPDF(String sourceFile, String newFile, String UserPassword, String OwnerPassword) 
    { 
     try 
     { 
      byte[] USER = System.Text.Encoding.ASCII.GetBytes(UserPassword); 
      byte[] OWNER = System.Text.Encoding.ASCII.GetBytes(OwnerPassword); 
      PdfReader reader = new PdfReader(sourceFile); 
      PdfStamper stamper = new PdfStamper(reader, new FileStream(newFile, FileMode.Create)); 
      stamper.SetEncryption(USER, OWNER, PdfWriter.AllowPrinting, PdfWriter.ENCRYPTION_AES_128); 
      stamper.Close(); 
      reader.Close(); 

      return true; 
     } 
     catch (Exception) 
     { 
      return false; 
     } 
    } 

같은 1234567890ABCDE = GHIJ12.

나는 "긴"암호를 적용하려고하면 다음과 같은 2017DgFLcnODOy8 = 7D- + 0 | Fk를/2 G- = 02D^XZ-D3S 2 @ |? WiuXjQJoRBU =, 난 발견에만 그 처음에는 32 자의 문자이 암호로 인식되었지만 입력 한 문자는 문제가되지 않지만 PDF 파일은 계속 열리는 것으로 보입니다.

PDF 또는 ITextsharp 라이브러리에 제한이 있습니까? 아니면 문제가 코드에 있습니까?

감사합니다.

답변

1

iText의 제한 사항이 아니라 PDF 사양의 고유 한 제한 사항입니다.

이것은 ISO 32000-1의 관련 부분입니다. 그것은 32 바이트 문자열을 말합니다.

enter image description here

ISO 32000-1은 PDF 1.7 파일을 생성 할 때의 사양입니다. iTextSharp (iText for .NET 대신)에 대해 언급하고 있으므로 이전 iText 버전을 사용하고 있다고 가정합니다.

몇 달 전 ISO 32000-2가 출시되었습니다 (PDF 2.0). PDF 2.0은 iText 7.1에서 지원됩니다. 긴 암호 (최대 48 바이트)는 PDF 2.0에서 사용할 수 있습니다.

사양에서 허용되는 것보다 긴 암호를 사용하면 여분의 모든 바이트가 iText에서 무시됩니다.

+0

다시 만나서 반가워요. 그렇다면 PDF가 처음 32 자까지만 암호로 인식된다는 뜻입니까? – Trowa

+0

ISO 32000-1의 관련 부분을 추가하여 답변을 업데이트했습니다. 일단 PDF 2.0을 만들고 싶다면 iText 버전을 iText 7로 업그레이드해야합니다. 7.1 버전에서 PDF 2.0을 지원할 예정입니다 (곧 출시 예정). 그 순간부터 48 바이트 암호를 사용할 수 있습니다. –

+0

설명 주셔서 감사합니다. iText 7로 업그레이드 할 것인지 결정하겠습니다. – Trowa