`
z251257144
  • 浏览: 91495 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

[iOS]iOS对PDF加密,解密

    博客分类:
  • iOS
阅读更多

保护PDF内容
为了保护PDF内容,我们可以在辅助字典中指定一些安全选项并传递给CGPDFContextCreate。我们可以通过包含如下关键字来设置所有者密码、用户密码、PDF是否可以被打印或拷贝:
· kCGPDFContextOwnerPassword定义PDF文档的所有者密码。如果指定该值,则文档使用所有者密码来加密;否则文档不加密。该关键字的值必须是ASCII编码的CFString对象。只有前32位是用于密码的。该值没有默认值。如果该值不能表示成ASCII,则无法创建文档并返回NULL。Quartz使用40-bit加密。
· kCGPDFContextUserPassword定义PDF文档的用户密码。如果文档加密了,则该值是文档的用户密码。如果没有指定,则用户密码为空。该关键字的值必须是ASCII编码的CFString对象。只有前32位是用于密码的。如果该值不能表示成ASCII,则无法创建文档并返回NULL。
· kCGPDFContextAllowsPrinting:指定当使用用户密码锁定时文档是否可以打印。该值必须是CFBoolean对象。默认值是kCGBooleanTrue。
· kCGPDFContextAllowsCopying指定当使用用户密码锁定时文档是否可以拷贝。该值必须是CFBoolean对象。默认值是kCGBooleanTrue。
代码清单14-4(下一章)显示了确认PDF文档是否被锁定,及用密码打开文档。

 

在创建PDF文件设置密码
使用Quartz创建PDF与绘制其它图形上下文一下简单。我们指定一个PDF文件地址,设置一个PDF图形上下文,并使用与其它图形上下文一样的绘制程序。如代码清单13-4所示的MyCreatePDFFile函数,显示了创建一个PDF的所有工作。
注意,代码在CGPDFContextBeginPage和CGPDFContextEndPage中来绘制PDF。我们可以传递一个CFDictionary对象来指定页属性,包括media, crop, bleed,trim和art boxes。

 

 

 

void MyCreatePDFFile (CGRectpageRect, const char *filename)

{

    CGContextRef pdfContext;

    CFStringRef path;

    CFURLRef url;

    CFData boxData = NULL;

    CFMutableDictionaryRef myDictionary = NULL;

    CFMutableDictionaryRef pageDictionary = NULL;

 

    path = CFStringCreateWithCString (NULL, filename, kCFStringEncodingUTF8);

 

    url = CFURLCreateWithFileSystemPath (NULL, path, kCFURLPOSIXPathStyle, 0);

 

    CFRelease (path);

 

    myDictionary = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);

 

    CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("MyPDF File"));

 

    CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("MyName"));

    CFDictionarySetValue(myDictionary, kCGPDFContextOwnerPassword, CFSTR("zhoumin"));

    

    CFDictionarySetValue(myDictionary, kCGPDFContextUserPassword, CFSTR("zhoumin"));

    ---------------------------------

    //zhoumin加入

 

    //kCGPDFContextOwnerPasswordkCGPDFContextUserPassword这两个选项是对pdf加密

     ---------------------------------

 

    pdfContext = CGPDFContextCreateWithURL (url, &pageRect,myDictionary);

 

    CFRelease(myDictionary);

 

    CFRelease(url);

 

    pageDictionary = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);

 

    boxData = CFDataCreate(NULL,(const UInt8 *)&pageRect, sizeof(CGRect));

 

    CFDictionarySetValue(pageDictionary, kCGPDFContextMediaBox, boxData);

 

    CGPDFContextBeginPage (pdfContext, &pageRect);

 

    myDrawContent (pdfContext);

 

    CGPDFContextEndPage (pdfContext);

 

    CGContextRelease (pdfContext);

 

    CFRelease(pageDictionary);

 

    CFRelease(boxData);

}

 

 

PDF解密

------------------------------------------------------------------

CGPDFDocumentRef pdf;

     pdf = CGPDFDocumentCreateWithURL(pdfURL);


  if (pdf == NULL) {

        NSLog(@"can't open '%@'", pdfURL);

CFRelease (pdfURL);

     }

 

 

 

        if (CGPDFDocumentIsEncrypted (pdf)) {//判断pdf是否加密

            if (!CGPDFDocumentUnlockWithPassword (pdf, "")) {//判断密码是否为""

                NSString *password = @"zhoumin";

                if (password != NULL) {

                    if (!CGPDFDocumentUnlockWithPassword (pdf, [password UTF8String]))

                        //使用passwordpdf进行解密,密码有效返回yes

                        NSLog(@"invalid password.");

                }

            }

        }

 

        if (!CGPDFDocumentIsUnlocked (pdf)) {//判断pdf是否打开状态

            NSLog(@"CGPDFDocumentIsUnlocked");

        }

 

        if (CGPDFDocumentGetNumberOfPages(pdf) == 0) {

            NSLog(@"CGPDFDocumentGetNumberOfPages == 0");

        }

 

------------------------------------------------------------------

 

 

苹果官方文档

http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_pdf_scan/dq_pdf_scan.html#//apple_ref/doc/uid/TP30001066-CH220-CJBDCGCB

分享到:
评论

相关推荐

    ios开发Tea加密解密

    本教程将深入讲解如何在iOS应用中实现Tea加密解密,以及如何正确地存储和恢复加密数据。 Tea加密算法基于两个32位的整数,它使用了四轮非线性变换,通过多次加法、乘法和位移操作来实现数据的加密。Tea算法的特点是...

    IOS RSA加密 分段解密

    标题"iOS RSA加密 分段解密"涉及到的关键知识点包括: 1. **RSA加密原理**:RSA算法基于欧拉定理和费马小定理,通过选取两个大素数p和q生成一个大合数n(即p*q),然后计算φ(n)=(p-1)*(q-1),选择一个与φ(n)互质...

    ios-iOS RSA加密与解密.zip

    iOS RSA加密与解密Demo:https://github.com/fuaiyi/RSAEncryption博客:http://www.jianshu.com/u/b1d7ade703b4

    AES加密解密算法 iOS和Android完美实现

    在iOS和Android平台上实现AES加密解密是开发者经常遇到的任务,尤其对于需要跨平台传输和存储敏感信息的场景。本篇文章将详细探讨AES加密解密算法在iOS和Android平台上的实现原理以及具体步骤。 首先,AES算法基于...

    ios AES加密解密

    本篇将详细介绍如何在iOS应用中实现AES加密解密。 一、AES加密原理 AES加密基于替换和置换操作,通过128位的块进行加密,密钥长度可以是128、192或256位。在加密过程中,原始数据会被分成128位的块,然后通过一系列...

    iOS AES加密解密

    本文将深入探讨iOS平台上使用Objective-C(OC)进行AES128加密和解密的实现,以及如何确保与硬件和蓝牙底层的兼容性。 首先,我们需要引入必要的库。在iOS中,苹果提供了一个名为CommonCrypto的框架,它包含了AES...

    AES加密解密,iOS,Android,Java,.Net通用

    对数据进行加密和解密 AES加密有多种算法模式,下面提供两套模式的可用源码: 一、CBC(Cipher Block Chaining,加密块链)模式 二、ECB(Electronic Code Book,电子密码本)模式 其中CBC模式下,有.NET的源码。而...

    DES加密解密一套JAVA&IOS

    4. 平台间兼容性处理:确保JAVA和iOS加密后的结果一致,以便于数据交换。 在实际应用中,需要注意以下几点: - DES的安全性相对较弱,因为56位的密钥长度容易受到现代计算机的攻击。为了增强安全性,通常会使用...

    iOS AES128加密解密

    **iOS中的AES128加密解密** AES(Advanced Encryption ...通过以上介绍,你应该对iOS平台上的AES128加密解密有了基本了解。在实际项目中,可以根据需求选择合适的实现方式,并结合良好的编程实践确保数据的安全。

    android iOS php des 互通加密解密算法

    本篇将详细讲解如何在`Android`、`iOS`和`PHP`中实现`DES`加密解密,并探讨其在中文和长字符串处理中的应用。 首先,让我们了解`DES`的基本原理。`DES`是一种分组密码,它将明文分成64位的数据块,然后使用56位的...

    ios-加密解密.zip

    "ios-加密解密.zip"这个文件很可能包含了一些关于iOS平台上加密和解密技术的资料,这对于我们理解和实现iOS应用中的数据保护至关重要。下面我们将深入探讨iOS平台上的加密技术及其应用。 在iOS中,主要使用的是对称...

    java、Android、javaScript、ios 通用 AES加密、解密 已实际使用

    java、Android、javaScript(可以改成vue)、ios AES加密通用,可在服务端加密,客户端解密,也可在客户端加密,服务端解密;由于csdn会自动把积分改到50,可以发邮件到1622007541@qq.com 免费送

    图片解密ios

    "图片解密ios"这个主题主要涉及的是如何在iOS应用中对图片进行加密和解密,确保数据的安全性,同时也能优化用户体验。下面将深入探讨相关知识点。 首先,我们需要理解为什么要在iOS应用中对图片进行加密。在移动...

    ios NSData NSString AES加密解密算法源码

    理解并掌握这种AES加密解密方法对于iOS开发者来说非常关键,可以有效地保护应用程序的数据安全,防止未授权访问。同时,了解如何在Objective-C中使用CommonCrypto库也可以扩展到其他加密算法的实现,如RSA或DES。在...

    iOS之RSA加密解密(亲测可用)

    在iOS开发中,数据安全是至关重要的...在iOS项目中实现RSA加密解密不仅能够保护用户的隐私,还可以符合App Store的安全规定,确保应用的合规性。通过理解并正确实施RSA加密,开发者可以构建更加安全、可靠的应用程序。

    iOS AES加密 PHP解密

    本话题将围绕“iOS AES加密 PHP解密”这一主题展开,讲解如何在iOS应用中使用AES加密数据,并在后端PHP环境中进行解密。 首先,我们需要理解AES的工作原理。AES是一种块加密算法,它以固定大小的块(128位)为单位...

    IOS - AES:ECB:PKCS7Padding加密、解

    在iOS应用中,AES经常用于加密和解密数据,确保信息在传输或存储时的安全。本篇文章将详细探讨AES在ECB模式下使用PKCS7填充的加密与解密方法。 AES加密算法有多种工作模式,如ECB(Electronic Codebook)、CBC...

    iOS与Android通用AES加密

    而"AESTest"可能包含了测试用例,用于验证iOS和Android两端加密解密的一致性。在实际项目中,开发者需要确保在两个平台上使用相同的密钥和初始化向量(IV)来加密和解密数据,这样才能保证数据的互操作性。 在实现...

    XXTEA加密解密 iOS 的 Objective-C 完美实现

    在iOS开发中,Objective-C作为主要的编程语言之一,实现XXTEA加密解密功能对于保护应用程序的数据安全至关重要。 Objective-C是苹果平台上的主要编程语言,它基于C语言并添加了面向对象的特性。在iOS应用开发中,...

Global site tag (gtag.js) - Google Analytics