Agregar firmas digitales a presentaciones en C++

Certificado digital se utiliza para crear una presentación de PowerPoint protegida con contraseña, marcada como creada por una organización o persona específica. El certificado digital puede obtenerse contactando a una organización autorizada, una autoridad certificadora. Después de instalar el certificado digital en el sistema, se puede usar para añadir una firma digital a la presentación mediante Archivo -> Información -> Proteger presentación:

todo:image_alt_text

La presentación puede contener más de una firma digital. Después de que la firma digital se añada a la presentación, aparecerá un mensaje especial en PowerPoint:

todo:image_alt_text

Para firmar la presentación o comprobar la autenticidad de las firmas de la presentación, Aspose.Slides API proporciona la interfazIDigitalSignature, la interfazIDigitalSignatureCollection y el métodoIPresentation.DigitalSignatures. Actualmente, las firmas digitales solo son compatibles con el formato PPTX.

Agregar una firma digital desde un certificado PFX

El siguiente ejemplo de código muestra cómo agregar una firma digital desde un certificado PFX:

  1. Abra el archivo PFX y pase la contraseña PFX al objetoDigitalSignature.
  2. Añada la firma creada al objeto de la presentación.
auto pres = System::MakeObject<Presentation>();

// Crear objeto DigitalSignature con archivo PFX y contraseña PFX
auto signature = System::MakeObject<DigitalSignature>(u"testsignature1.pfx", u"testpass1");

// Comentario de la nueva firma digital
signature->set_Comments(u"Aspose.Slides digital signing test.");

// Agregar firma digital a la presentación
pres->get_DigitalSignatures()->Add(signature);

// Guardar presentación
pres->Save(u"SomePresentationSigned.pptx", SaveFormat::Pptx);

Ahora es posible comprobar si la presentación fue firmada digitalmente y no ha sido modificada:

// Abrir presentación
auto pres = System::MakeObject<Presentation>(u"SomePresentationSigned.pptx");

if (pres->get_DigitalSignatures()->get_Count() > 0)
{
    bool allSignaturesAreValid = true;

    Console::WriteLine(u"Signatures used to sign the presentation: ");

    // Verificar si todas las firmas digitales son válidas
    for (auto signature : pres->get_DigitalSignatures())
    {
        Console::WriteLine(signature->get_Certificate()->get_SubjectName()->get_Name() 
            + u", " 
            + signature->get_SignTime().ToString(u"yyyy-MM-dd HH:mm") 
            + u" -- " 
            + (signature->get_IsValid() ? System::String(u"VALID") : System::String(u"INVALID")));
        allSignaturesAreValid &= signature->get_IsValid();
    }

    if (allSignaturesAreValid)
    {
        Console::WriteLine(u"Presentation is genuine, all signatures are valid.");
    }
    else
    {
        Console::WriteLine(u"Presentation has been modified since signing.");
    }
}

FAQ

¿Puedo eliminar firmas existentes de un archivo?

Sí. La colección de firmas digitales permite eliminar elementos individuales y borrarla completamente; después de guardar el archivo, la presentación no tendrá firmas.

¿El archivo se vuelve "solo lectura" después de firmarlo?

No. Una firma preserva la integridad y la autoría pero no bloquea la edición. Para restringir la edición, combínela con "Solo lectura" o una contraseña.

¿La firma se mostrará correctamente en diferentes versiones de PowerPoint?

La firma se crea para el contenedor OOXML (PPTX). Las versiones modernas de PowerPoint que admiten firmas OOXML muestran el estado de dichas firmas correctamente.