이 페이지에는 자동 번역된 텍스트가 포함될 수 있습니다.

C# 및 VB.NET에서 PDF 문서 암호화

Docotic.Pdf 라이브러리를 사용하면 비밀번호나 인증서로 PDF 문서를 암호화할 수 있습니다.

라이브러리는 선택한 암호화 알고리즘을 사용하여 보호된 문서를 암호화합니다. 라이브러리는 RC4 40비트, RC4 128비트, AES 128비트 및 AES 256비트 암호화 알고리즘을 지원합니다. 보호된 PDF 파일의 사용자에게 부여할 권한을 결정합니다.

C# 및 VB.NET에서 PDF 문서 암호화

비밀번호로 PDF를 보호하세요

비밀번호로 보호된 PDF 문서에는 소유자 비밀번호와 선택적으로 사용자 비밀번호가 있습니다. 누군가가 소유자 비밀번호로 비밀번호로 보호된 PDF 파일을 열면 모든 PDF 권한이 부여됩니다. 사용자 비밀번호를 사용하거나 비밀번호 없이 PDF 문서를 열면 "사용자" 권한만 부여됩니다. 예를 들어, 암호화된 PDF 파일의 작성자는 "사용자"에 대한 인쇄를 허용하지 않을 수 있지만 "소유자"는 여전히 문서를 인쇄할 수 있습니다.

비밀번호로 보호된 PDF 문서를 생성하려면 PdfStandardEncryptionHandler 클래스의 인스턴스를 생성하고 필요에 따라 설정하세요. 그런 다음 문서 저장 옵션의 EncryptionHandler 속성에 개체를 할당합니다. 라이브러리는 처리기를 사용하여 PDF 문서를 저장하는 동안 암호화합니다.

다음 코드 조각은 C#에서 암호로 보호된 PDF 파일을 만드는 방법을 보여줍니다:

using (PdfDocument document = ...)
{
    var handler = new PdfStandardEncryptionHandler("owner", "user");
    handler.UserPermissions.Flags = PdfPermissionFlags.ModifyContents;

    var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
    document.Save(outputFileName, saveOptions);
}

위의 코드는 소유자 비밀번호로 owner를 사용하고 사용자 비밀번호로 user를 사용합니다. PDF 뷰어에서는 보안된 PDF 파일을 열려면 비밀번호가 필요합니다. 이는 사용자 비밀번호가 null 또는 빈 문자열이 아니기 때문입니다.

보안된 PDF 파일을 원하지만 누구나 비밀번호 없이 파일을 열 수 있도록 하려면 사용자 비밀번호에 null 또는 빈 문자열을 사용하세요.

.NET의 인증서로 PDF 보호

인증서로 보호된 모든 PDF 문서에는 수신자 모음이 있습니다. 컬렉션에는 원하는 수의 항목이 포함될 수 있습니다. 각 수신자는 보안된 PDF 문서를 해독하는 데 사용할 수 있는 인증서를 설명합니다. 각 수신자에 대해 PDF 액세스 권한이 지정되어 있습니다. 해독된 PDF 문서에 부여된 권한은 문서 보호를 해제하는 데 사용된 인증서에 따라 다릅니다.

일부 액세스 권한은 해독된 PDF 파일에 대한 모든 작업을 허용합니다. 그러한 권한을 가진 수신자를 Docotic.Pdf 라이브러리의 소유자라고 부릅니다. 일반 수신자는 해독된 PDF 문서에 대해 제한된 권한을 갖습니다.

인증서로 보호된 문서를 생성하려면 PdfPublicKeyEncryptionHandler 클래스의 인스턴스 생성부터 시작하세요. 권한 매개변수가 없는 생성자는 소유자 수신자가 있는 객체를 생성합니다. 일반 수신자가 포함된 암호화 처리기를 가져오려면 권한 매개변수와 함께 생성자를 사용하세요.

AddOwner 메서드를 사용하여 더 많은 소유자 수신자를 추가할 수 있습니다. 일반 수신자를 추가하려면 AddRecipient 메서드를 사용하세요. 필요에 따라 암호화 처리기에 소유자와 일반 수신자를 원하는 만큼 추가할 수 있습니다.

그런 다음 문서를 저장하는 동안 핸들러를 사용하도록 라이브러리에 지시합니다. 이를 위해 문서 저장 옵션의 EncryptionHandler 속성에 개체를 할당합니다.

다음 코드는 C#에서 인증서로 보호된 PDF 파일을 만드는 방법을 보여줍니다. 코드는 소유자와 일반 수신자가 있는 핸들러를 준비합니다. 두 경우 모두 수신자의 인증서는 제공된 키 저장소에서 가져옵니다.

using (PdfDocument document = ...)
{
    var handler = new PdfPublicKeyEncryptionHandler("owner-key-store.p12", "password");
    
    var permissions = new PdfPermissions();
    permissions.Flags = PdfPermissionFlags.FillFormFields | PdfPermissionFlags.PrintDocument;
    handler.AddRecipient("recipient-key-store.p12", "password", permissions);
    
    var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
    document.Save(outputFileName, saveOptions);
}

PDF 파일 편집 제한

PDF 문서를 암호화할 때 파일 사용자에 대한 권한을 설정해야 합니다. 즉, 사용자 비밀번호나 일반 수신자와 일치하는 인증서로 열린 문서에 대해 부여할 PDF 권한을 지정해야 합니다.

Docotic.Pdf 라이브러리는 사용자 권한에 대한 PdfPermissions 클래스를 제공합니다. 이 클래스는 권한을 설정하는 두 가지 방법을 제공합니다. Flags 속성을 사용하면 모든 권한을 한 번에 설정할 수 있습니다. 대안은 가능한 각 권한에 대해 개별 속성을 사용하는 것입니다.

PdfStandardEncryptionHandler 객체를 생성할 때 UserPermissions 속성을 사용하여 권한에 액세스하세요. PdfPublicKeyEncryptionHandler 객체와 함께 PdfPermissions 생성자를 사용하세요. 나머지 설정은 동일합니다.

다음 코드는 C#에서 PDF 권한을 설정하는 방법을 보여줍니다:

// 기본적으로 권한 개체는 모든 것을 허용합니다.

// Flags 속성을 사용하여 특정 권한만 부여할 수 있습니다.
var permisssions1 = new PdfPermissions();
permisssions1.Flags = PdfPermissionFlags.FillFormFields | PdfPermissionFlags.ModifyAnnotations;

// 또는 거부하려는 권한만 비활성화할 수도 있습니다.
var permisssions2 = new PdfPermissions();
permisssions2.AssembleDocument = false;
permisssions2.CopyContents = false;
permisssions2.ExtractContents = false;
permisssions2.ModifyContents = false;
permisssions2.PrintDocument = false;
permisssions2.PrintFaithfulCopy = false;

// 또는 먼저 모든 권한을 비활성화한 다음 허용하려는 권한만 활성화할 수 있습니다.
var permisssions3 = new PdfPermissions();
permisssions3.AllowEverything = false;
permisssions3.FillFormFields = true;
permisssions3.ModifyAnnotations = true;

// permisssions1, permisssions2 및 permisssions3 객체는 이 시점에서 동일한 권한을 설명합니다.

.NET에서 AES-256을 사용하여 PDF 암호화

Docotic.Pdf는 AES-256으로 PDF 문서를 암호화할 수 있습니다. 이 암호화 알고리즘은 라이브러리에서 지원하는 가장 강력한 알고리즘입니다. 모든 PDF 리더가 알고리즘을 지원하는 것은 아닙니다.

PdfStandardEncryptionHandler 또는 PdfPublicKeyEncryptionHandler 객체를 생성한 후 Algorithm 속성을 사용하여 암호화 알고리즘을 설정합니다.

다음 C# 코드는 PDF 문서를 암호로 보호하고 AES-256을 사용하여 암호화하는 방법을 보여줍니다:

using (var pdf = new PdfDocument())
{
    // ....

    var handler = new PdfStandardEncryptionHandler("owner", "user");
    handler.Algorithm = PdfEncryptionAlgorithm.Aes256Bit;

    var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
    pdf.Save("encrypted", saveOptions);
}

암호화 및 PDF/A

PDF/A 파일을 암호화하는 것은 허용되지 않습니다. 암호화 처리기를 설정하고 문서 저장 옵션에서 PDF/A를 생성하는 옵션을 켜려고 하면 라이브러리에서 PdfException 유형의 예외가 발생합니다.

PDF/A in a Nutshell에는 PDF/A 파일을 보호하는 방법에 대한 조언이 있습니다.:

PDF/A 파일을 보호하려는 사용자는 해당 파일의 저장 위치를 보호해야 합니다. 예를 들어 폴더나 드라이브에 대한 비밀번호 보호를 구현하면 이를 달성할 수 있습니다.