非常感謝大家利用自己寶貴的時間來閱讀我的文章 , ?最近做了一個用到Epub閱讀的項目,下面跟大家分享一下開發(fā)心得,希望能給你的開發(fā)過程帶來一些幫助。喜歡的可以關注一下我的簡書、我的博客????
關于epub閱讀器,我是在github上找了個叫XDSReader的開源閱讀器做了些修改,研究了一下他的源碼,修改了些BUG,包括筆記的刪除,書簽章節(jié)名稱錯亂,首頁點擊第一章崩潰等小問題,具體都是在什么地方做的修改都忘得差不多了,這篇文章的重點不在這,也就不再多說了。
因為某些不知名的保密原因,公司不允許直接下載原始epub文件,讓研究一下加密方式,做了一天嘗試,感覺最好的方式就是對epub中所有的xhtml文件內容進行AES128加密,客戶端下載加密后的epub文件,在閱讀的過程中對xhtml文件進行解密。
具體的實現(xiàn)方式是后臺開發(fā)人員找了個第三方,具體什么第三方我不清楚,能實現(xiàn)我想要的功能就行了,就是可以遍歷epub里的所有文件,針對xhtml文件類型進行IO流的AES128加密,加密完成后輸出加密后的epub文件,客戶端這邊下載完成后調用XDSReader進行epub閱讀,當然,要對他的源碼做些修改,修改之前先跟蹤XDSReader解析epub文件過程
1、解析opf文件,獲取epub基本信息
2、解析ncx文件,獲取章節(jié)信息
3、通過獲取的章節(jié)列表信息加載解析對應的xhtml文件
4、使用DTCoreText進行富文本展示
我們只需要在第三步的時候改下解析xhtml的代碼,對xhtml文件的內容做次AES128解密就行了,具體代碼位置在XDSChapterModel.m文件里的attrubutedStringForSnippet方法里,不管用什么閱讀器,epub的解析應該是大同小異的。
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];??
這樣就可以實現(xiàn)epub文件的加密啦,注意,對epub加密的時候只加密xhtml格式的文件就行了,要不解析其他文件的代碼也要做相應修改,麻煩且容易出問題,只對xhtml文件加密可以在實現(xiàn)加密的基礎上減輕很大的工作量,還是可取的,OK這是我對epub加密實現(xiàn)的一知半解,如果有其他見解,歡迎討論交流~