Establecer Privilegios, Encriptar y Desencriptar Archivo PDF usando C++

Establecer Privilegios en un Archivo PDF Existente

Para establecer privilegios en un archivo PDF existente Aspose.PDF para C++ usa la clase DocumentPrivilege y especifica los derechos que deseas aplicar al documento. Una vez que los privilegios han sido definidos, pasa este objeto como un argumento al método Encrypt del objeto Document.

El siguiente fragmento de código te muestra cómo establecer los privilegios de un archivo PDF.

void SecuringAndSigning::SetPrivilegesOnExistingPDF() {
    // Cadena para el nombre de la ruta.
    String _dataDir("C:\\Samples\\");

    // Cargar un archivo PDF de origen
    auto document = MakeObject<Document>(_dataDir + u"input.pdf");

    // Instanciar objeto de privilegios de documento

    // Aplicar restricciones a todos los privilegios
    auto documentPrivilege = DocumentPrivilege::get_ForbidAll();
    // Solo permitir lectura de pantalla
    documentPrivilege->set_AllowScreenReaders(true);

    // Encriptar el archivo con contraseña de Usuario y Propietario.
    // Necesita establecer la contraseña, para que una vez que el usuario vea el archivo con la contraseña de usuario,

    // Solo la opción de lectura de pantalla está habilitada
    document->Encrypt(u"user", u"owner", documentPrivilege, CryptoAlgorithm::AESx128, false);

    // Guardar documento actualizado
    document->Save(_dataDir + u"SetPrivileges_out.pdf");
}

Encriptar archivo PDF utilizando diferentes tipos de encriptación y algoritmos

Para encriptar el archivo PDF use el método Encrypt del objeto Document para encriptar un archivo PDF.

El siguiente fragmento de código te muestra cómo cifrar archivos PDF.

void SecuringAndSigning::EncryptPDFFile() {
    // Cadena para el nombre del camino.
    String _dataDir("C:\\Samples\\");

    // Cargar un archivo PDF de origen
    auto document = MakeObject<Document>(_dataDir + u"input.pdf");

    // Instanciar objeto de Privilegios del Documento
    // Aplicar restricciones en todos los privilegios
    auto documentPrivilege = DocumentPrivilege::get_ForbidAll();
    // Solo permitir lectura de pantalla
    documentPrivilege->set_AllowScreenReaders(true);
    // Cifrar el archivo con contraseña de Usuario y Propietario.
    // Necesita establecer la contraseña, para que una vez que el usuario vea el archivo con la
    // contraseña de usuario,
    // Solo la opción de lectura de pantalla está habilitada
    document->Encrypt(u"user", u"owner", documentPrivilege, CryptoAlgorithm::AESx128, false);
    // Guardar el documento actualizado
    document->Save(_dataDir + u"SetPrivileges_out.pdf");
}

Desencriptar archivo PDF usando contraseña de propietario

Para desencriptar el archivo PDF, primero necesitas crear un objeto Document y abrir el PDF usando la contraseña del propietario. Después de eso, necesitas llamar al método Decrypt.

void SecuringAndSigning::DecryptPDFFile() {


// Cadena para el nombre de la ruta.

String _dataDir("C:\\Samples\\");


// Abrir documento

auto document = MakeObject<Document>(_dataDir + u"Decrypt.pdf", u"password");

// Desencriptar PDF

document->Decrypt();


// Guardar PDF actualizado

document->Save(_dataDir + u"Decrypt_out.pdf");
}

Cambiar la Contraseña de un Archivo PDF

Dado que tus PDFs pueden contener información importante y confidencial, deben permanecer seguros. En consecuencia, es posible que necesites cambiar la contraseña de tu documento PDF.

Si deseas cambiar la contraseña de un archivo PDF, primero necesitas abrir el archivo PDF usando la contraseña de propietario con el objeto Document. Después de eso, necesitas llamar al método ChangePasswords.

El siguiente fragmento de código te muestra cómo cambiar la contraseña de un archivo PDF.

void SecuringAndSigning::ChangePassword_PDF_File() {

// String for path name.

String _dataDir("C:\\Samples\\");


// Open document

auto document = MakeObject<Document>(_dataDir + u"ChangePassword.pdf", u"owner");

// Change password

document->ChangePasswords(u"owner", u"newuser", u"newowner");

// Save updated PDF

document->Save(_dataDir + u"ChangePassword_out.pdf");
}

Cómo - determinar si el PDF de origen está protegido con contraseña

Un documento PDF cifrado con la contraseña del usuario no se puede abrir sin una contraseña.


### Obtener información sobre la seguridad del documento PDF

PdfFileInfo contiene tres propiedades para obtener información sobre la seguridad del documento PDF.

1. La propiedad PasswordType devuelve un valor de enumeración PasswordType:
    - PasswordType.None - el documento no está protegido con contraseña
    - PasswordType.User - el documento se abrió con una contraseña de usuario (o documento abierto)
    - PasswordType.Owner - el documento se abrió con una contraseña de propietario (o permisos, editar)

    - PasswordType.Inaccessible - el documento está protegido con contraseña pero se necesita la contraseña para abrirlo mientras se proporcionó una contraseña inválida (o ninguna contraseña).2. propiedad booleana HasOpenPassword - se utiliza para determinar si el archivo de entrada requiere una contraseña al abrirlo.  
3. propiedad booleana HasEditPassword - se utiliza para determinar si el archivo de entrada requiere una contraseña para editar su contenido.

### Determinar la contraseña correcta de un Array

A veces hay un requisito para determinar la contraseña correcta de un array de contraseñas y abrir el documento con la contraseña correcta. El siguiente fragmento de código demuestra los pasos para iterar a través del array de contraseñas e intentar abrir el documento con la contraseña correcta.

```cpp
void SecuringAndSigning::DetermineCorrectPasswordFromArray() {


// Cadena para el nombre de la ruta.

String _dataDir("C:\\Samples\\");


// Cargar archivo PDF de origen

auto info = MakeObject<PdfFileInfo>(_dataDir + u"IsPasswordProtected.pdf");


// Determinar si el PDF de origen está encriptado

Console::WriteLine(u"El archivo está protegido con contraseña {0}", info->get_IsEncrypted());

const int count = 5;

String passwords[count] = { u"test", u"test1", u"test2", u"owner", u"sample" };


for (int passwordcount = 0; passwordcount < count; passwordcount++)

{


try


{



auto document = MakeObject<Document>(_dataDir + u"IsPasswordProtected.pdf", passwords[passwordcount]);



auto pages = document->get_Pages()->get_Count();



if (pages > 0)




Console::WriteLine(u"El número de páginas en el documento es = {0}", pages);


}


catch (Aspose::Pdf::InvalidPasswordException ex)


{



Console::WriteLine(u"La contraseña = {0} no es correcta", passwords[passwordcount]);


}

}

Console::WriteLine(u"Prueba finalizada");
}