Definir Privilégios, Criptografar e Descriptografar PDF

O seguinte trecho de código também funciona com a biblioteca Aspose.PDF.Drawing.

Definir Privilégios em um Arquivo PDF Existente

Para definir privilégios em um arquivo PDF, crie um objeto da classe DocumentPrivilege e especifique os direitos que você deseja aplicar ao documento. Uma vez que os privilégios tenham sido definidos, passe este objeto como um argumento para o método Encrypt do objeto Document. O seguinte trecho de código mostra como definir os privilégios de um arquivo PDF.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void SetPrivilegesOnExistingPdfFile()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();
    
    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "input.pdf"))
    {
        // Instantiate Document Privileges object
        // Apply restrictions on all privileges
        var documentPrivilege = Aspose.Pdf.Facades.DocumentPrivilege.ForbidAll;
        // Only allow screen reading
        documentPrivilege.AllowScreenReaders = true;
        // Encrypt the file with User and Owner password
        // Need to set the password, so that once the user views the file with user password
        // Only screen reading option is enabled
        document.Encrypt("user", "owner", documentPrivilege, Aspose.Pdf.CryptoAlgorithm.AESx128, false);
        // Save PDF document
        document.Save(dataDir + "SetPrivileges_out.pdf");
    }
}

Criptografar Arquivo PDF usando Diferentes Tipos e Algoritmos de Criptografia

Você pode usar o método Encrypt do objeto Document para criptografar um arquivo PDF. Você pode passar a senha do usuário, a senha do proprietário e permissões para o método Encrypt. Além disso, você pode passar qualquer valor do enum CryptoAlgorithm. Este enum fornece diferentes combinações de algoritmos de criptografia e tamanhos de chave. Você pode passar o valor de sua escolha. Finalmente, salve o arquivo PDF criptografado usando o método Save do objeto Document.

Por favor, especifique senhas de usuário e proprietário diferentes ao criptografar o arquivo PDF.

  • A Senha do Usuário, se definida, é o que você precisa fornecer para abrir um PDF. O Acrobat/Reader solicitará que o usuário insira a senha do usuário. Se não estiver correta, o documento não será aberto.
  • A Senha do Proprietário, se definida, controla permissões, como impressão, edição, extração, comentários, etc. O Acrobat/Reader não permitirá essas ações com base nas configurações de permissão. O Acrobat exigirá essa senha se você quiser definir/mudar permissões.

O seguinte trecho de código mostra como criptografar arquivos PDF.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void EncryptPdfFile()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();
    
    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "Encrypt.pdf"))
    {
        // Encrypt PDF
        document.Encrypt("user", "owner", 0, Aspose.Pdf.CryptoAlgorithm.RC4x128);
        // Save PDF document
        document.Save(dataDir + "Encrypt_out.pdf");
    }
}

Descriptografar Arquivo PDF usando a Senha do Proprietário

Cada vez mais, os usuários estão trocando arquivos PDF com criptografia para evitar acesso não autorizado a documentos, como impressão/cópia/compartilhamento/extração de informações sobre o conteúdo de um arquivo PDF. Hoje, é a melhor escolha para criptografar um arquivo PDF porque mantém a confidencialidade e integridade do conteúdo. Nesse sentido, há uma necessidade de acessar o arquivo PDF criptografado, uma vez que tal acesso só pode ser obtido por um usuário autorizado. Além disso, as pessoas estão procurando várias soluções para descriptografar arquivos PDF na Internet.

É melhor resolver esse problema uma vez usando a biblioteca Aspose.PDF.

Para descriptografar o arquivo PDF, você primeiro precisa criar um objeto Document e abrir o PDF usando a senha do proprietário. Depois disso, você precisa chamar o método Decrypt do objeto Document. Finalmente, salve o arquivo PDF atualizado usando o método Save do objeto Document. O seguinte trecho de código mostra como descriptografar o arquivo PDF.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void DecryptPdfFile()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();
    
    // Open PDF document with password
    using (var document = new Aspose.Pdf.Document(dataDir + "Decrypt.pdf", "password"))
    {
        // Decrypt PDF
        document.Decrypt();
        // Save PDF document
        document.Save(dataDir + "Decrypt_out.pdf");
    }
}

Criptografia com certificado público

Você pode criptografar um documento para que apenas os proprietários dos certificados que você especificar durante a criptografia possam abri-lo. Para criptografar o documento, você precisará dos certificados públicos de todos os destinatários. Para abrir o documento, o destinatário deve ter o certificado público e o certificado de chave privada correspondente. Se o destinatário estiver abrindo o documento no Adobe Acrobat, o certificado deve estar instalado no armazenamento de certificados. Para abrir o documento usando Aspose.Pdf, você pode usar um certificado instalado no armazenamento ou um arquivo PFX.

Mudar Senha de um Arquivo PDF

Se você deseja mudar a senha de um arquivo PDF, primeiro precisa abrir o arquivo PDF usando a senha do proprietário com o objeto Document. Depois disso, você precisa chamar o método ChangePasswords do objeto Document. Você precisa passar a senha atual do proprietário junto com a nova senha do usuário e a nova senha do proprietário para este método. Finalmente, salve o arquivo PDF atualizado usando o método Save do objeto Document.

  • A Senha do Usuário, se definida, é o que você precisa fornecer para abrir um PDF. O Acrobat/Reader solicitará que o usuário insira a senha do usuário. Se não estiver correta, o documento não será aberto.
  • A Senha do Proprietário, se definida, controla permissões, como impressão, edição, extração, comentários, etc. O Acrobat/Reader não permitirá essas ações com base nas configurações de permissão. O Acrobat exigirá essa senha se você quiser definir/mudar permissões.

O seguinte trecho de código mostra como mudar a senha de um arquivo PDF.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ChangePassword()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();

    // Open PDF document with password
    using (var document = new Aspose.Pdf.Document(dataDir + "ChangePassword.pdf", "owner"))
    {
        // Change password
        document.ChangePasswords("owner", "newuser", "newowner");
        // Save PDF document
        document.Save(dataDir + "ChangePassword_out.pdf");
    }
}

Como - determinar se o PDF de origem está protegido por senha

Aspose.PDF for .NET fornece grandes capacidades de lidar com documentos PDF. Ao usar a classe Document do namespace Aspose.PDF para abrir um documento PDF que está protegido por senha, precisamos fornecer as informações da senha como um argumento para o construtor Document e, caso essa informação não seja fornecida, uma mensagem de erro é gerada. Na verdade, ao tentar abrir um arquivo PDF com o objeto Document, o construtor tenta ler o conteúdo do arquivo PDF e, caso a senha correta não seja fornecida, uma mensagem de erro é gerada (isso acontece para evitar acesso não autorizado ao documento).

Ao lidar com arquivos PDF criptografados, você pode se deparar com o cenário em que estaria interessado em detectar se um PDF tem uma senha de abertura e/ou uma senha de edição. Às vezes, existem documentos que não requerem informações de senha ao abri-los, mas exigem informações para editar o conteúdo do arquivo. Portanto, para atender aos requisitos acima, a classe PdfFileInfo presente em Aspose.PDF.Facades fornece as propriedades que podem ajudar a determinar as informações necessárias.

Obter informações sobre a segurança do documento PDF

PdfFileInfo contém três propriedades para obter informações sobre a segurança do documento PDF.

  1. A propriedade PasswordType retorna o valor da enumeração PasswordType:
    • PasswordType.None - o documento não está protegido por senha.
    • PasswordType.User - o documento foi aberto com a senha do usuário (ou senha de abertura do documento).
    • PasswordType.Owner - o documento foi aberto com a senha do proprietário (ou permissões, edição).
    • PasswordType.Inaccessible - o documento está protegido por senha, mas a senha é necessária para abri-lo enquanto uma senha inválida (ou nenhuma senha) foi fornecida.
  2. A propriedade booleana HasOpenPassword - é usada para determinar se o arquivo de entrada requer uma senha ao abri-lo.
  3. A propriedade booleana HasEditPassword - é usada para determinar se o arquivo de entrada requer uma senha para editar seu conteúdo.

Determinar a senha correta a partir de um Array

Às vezes, há uma necessidade de determinar a senha correta a partir de um array de senhas e abrir o documento com a senha correta. O seguinte trecho de código demonstra os passos para iterar pelo array de senhas e tentar abrir o documento com a senha correta.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void DetermineCorrectPasswordFromArray()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();
    
    using (var info = new Aspose.Pdf.Facades.PdfFileInfo())
    {
        // Bind PDF document
        info.BindPdf(dataDir + "IsPasswordProtected.pdf");
        // Determine if the source PDF is encrypted
        Console.WriteLine("File is password protected " + info.IsEncrypted);
    
        String[] passwords = new String[5] { "test", "test1", "test2", "test3", "sample" };
    
        for (int passwordcount = 0; passwordcount < passwords.Length; passwordcount++)
        {
            try
            {
                using (var document = new Aspose.Pdf.Document(dataDir + "IsPasswordProtected.pdf", passwords[passwordcount]))
                {
                    if (document.Pages.Count > 0)
                    {
                        Console.WriteLine("Number of Page in document are = " + document.Pages.Count);
                    }
                }
            }
            catch (Aspose.Pdf.InvalidPasswordException)
            {
                Console.WriteLine("Password = " + passwords[passwordcount] + "  is not correct");
            }
        }
    }
}