Back to Blog

    Developer Blog

    How to Encrypt PDF files using Foxit PDF SDK (Objective-C)

    Foxit PDF SDK for Mac

    Foxit PDF SDK provides a range of encryption and decryption functions to meet different levels of document security protection. Users can use regular password encryption and certificate-driven encryption, or use their own security handler for custom security implementation. It also provides APIs to integrate with the third-party security mechanism (Microsoft RMS). These APIs allow developers to work with the Microsoft RMS SDK to both encrypt (protect) and decrypt (unprotect) PDF documents.

    Note: For more detailed information about the RMS encryption and decryption, please refer to the simple demo “security” in the “examples\simple_demo” folder of the download package.

    Example:

    How to encrypt a PDF file with a Certificate

    #include "FSPDFObjC.h"
    ...
    FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:input_file];
    FSErrorCode code = [doc load:nil];
    if (code != FSErrSuccess) {
        return -1;
    }
    // Do encryption.
    NSMutableArray *envelopes = @[].mutableCopy;
    NSMutableData *initial_key = [NSMutableData new];
    NSString *cert_file_path = [input_path stringByAppendingPathComponent:@"foxit.cer"];
    // GetCertificateInfo is implemented in user side to get information from certificate file.
    if (!GetCertificateInfo(cert_file_path, envelopes, initial_key, true, 16)) {
        return -1;
    }
    FSCertificateSecurityHandler *handler = [[FSCertificateSecurityHandler alloc] init];
    FSCertificateEncryptData *encrypt_data = [[FSCertificateEncryptData alloc] initWithIs_encrypt_metadata:YES cipher:FSSecurityHandlerCipherAES envelopes:envelopes];
    [handler initialize:encrypt_data encrypt_key:initial_key];
    [doc setSecurityHandler:handler];
    NSString *output_file = [output_directory stringByAppendingPathComponent:@"certificate_encrypt.pdf"];
    [doc saveAs:output_file save_flags:FSPDFDocSaveFlagNoOriginal];
    ...
    

    How to encrypt a PDF file with Foxit DRM

    #include "FSPDFObjC.h"
    ...
    FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:input_file];
    FSErrorCode code = [doc load:nil];
    if (code != FSErrSuccess) {
        return -1;
    }
    // Do encryption.
    FSDRMSecurityHandler *handler = [[FSDRMSecurityHandler alloc] init];
    NSString *file_id = @"Simple-DRM-file-ID";
    NSData *initialize_key = [@"Simple-DRM-initialize-key" dataUsingEncoding:NSUTF8StringEncoding];
    FSDRMEncryptData *encrypt_data = [[FSDRMEncryptData alloc] initWithIs_encrypt_metadata:TRUE sub_filter:@"Simple-DRM-filter" cipher:FSSecurityHandlerCipherAES key_length:16 is_owner:YES user_permissions:0xfffffffc];
    [handler initialize:encrypt_data file_id:file_id initial_key:initialize_key];
    [doc setSecurityHandler:handler];
    NSString *output_file = [output_directory stringByAppendingPathComponent:@"foxit_drm_encrypt.pdf"];
    [doc saveAs:output_file save_flags:FSPDFDocSaveFlagNoOriginal];
    ...