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 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 em busca de 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");
    }
}

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 do proprietário atual 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 requerem informações para editar o conteúdo do arquivo. Portanto, para atender aos requisitos acima, a classe PdfFileInfo presente sob 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");
            }
        }
    }
}