ios Epub加密及解密阅读的一种实现方式

非常感谢大家利用自己宝贵的时间来阅读我的文章 ,  最近做了一个用到Epub阅读的项目,下面跟大家分享一下开发心得,希望能给你的开发过程带来一些帮助。喜欢的可以关注一下我的简书我的博客    

关于epub阅读器,我是在github上找了个叫XDSReader的开源阅读器做了些修改,研究了一下他的源码,修改了些BUG,包括笔记的删除,书签章节名称错乱,首页点击第一章崩溃等小问题,具体都是在什么地方做的修改都忘得差不多了,这篇文章的重点不在这,也就不再多说了。

因为某些不知名的保密原因,公司不允许直接下载原始epub文件,让研究一下加密方式,做了一天尝试,感觉最好的方式就是对epub中所有的xhtml文件内容进行AES128加密,客户端下载加密后的epub文件,在阅读的过程中对xhtml文件进行解密。


具体的实现方式是后台开发人员找了个第三方,具体什么第三方我不清楚,能实现我想要的功能就行了生气,就是可以遍历epub里的所有文件,针对xhtml文件类型进行IO流的AES128加密,加密完成后输出加密后的epub文件,客户端这边下载完成后调用XDSReader进行epub阅读,当然,要对他的源码做些修改,修改之前先跟踪XDSReader解析epub文件过程

1、解析opf文件,获取epub基本信息

2、解析ncx文件,获取章节信息

3、通过获取的章节列表信息加载解析对应的xhtml文件

4、使用DTCoreText进行富文本展示

我们只需要在第三步的时候改下解析xhtml的代码,对xhtml文件的内容做次AES128解密就行了,具体代码位置在XDSChapterModel.m文件里的attrubutedStringForSnippet方法里,不管用什么阅读器,epub的解析应该是大同小异的。

原来XDSReader的解析代码为

NSString *OEBPSUrl = CURRENT_BOOK_MODEL.bookBasicInfo.OEBPSUrl;
        OEBPSUrl = [APP_SANDBOX_DOCUMENT_PATH stringByAppendingString:OEBPSUrl];
        NSString *fileName = [NSString stringWithFormat:@"%@/%@", OEBPSUrl, self.chapterSrc];
        //    // Load HTML data
        readmePath = fileName;   
        html = [NSString stringWithContentsOfFile:readmePath encoding:NSUTF8StringEncoding error:NULL];

html = [NSString stringWithContentsOfFile:readmePath encoding:NSUTF8StringEncoding error:NULL];

替换为

NSData *data = [NSData dataWithContentsOfFile:readmePath];
        NSData *DecryptData = [data AES128DecryptWithKey:@"AES128密匙字符串" iv:@"AES128偏移量字符串"];
html =[[NSString alloc] initWithData:DecryptData encoding:NSUTF8StringEncoding];

关于AES128加密,可以看下这个ios AES128加密

这样就可以实现epub文件的加密啦,注意,对epub加密的时候只加密xhtml格式的文件就行了,要不解析其他文件的代码也要做相应修改,麻烦且容易出问题,只对xhtml文件加密可以在实现加密的基础上减轻很大的工作量,还是可取的微笑,OK这是我对epub加密实现的一知半解,如果有其他见解,欢迎讨论交流~



发布了12 篇原创文章 · 获赞 2 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览