最近入职一家新公司,上半年的时间都在漂泊,一直在试用期内,忙得不可开胶。新公司是做hybird开发的,HTML和原生开发。说是之前单纯使用HTML的用户体验比较差,就换了成hybird,我也就是这个时间节点入职了。忙了一段时间,终于到收尾的时刻。之前,用的是APICloud提供的解决方案,打包都是在APICloud上,平台上会将HTML,JS,CSS文件进行压缩加密,采用hybird的方案,Xcode就不会帮你加密压缩HTML相关的文件和代码,这么一来,只要下载你的ipa就能拿到你的HTML代码,很多时候HTML只是负责显示而已,没有掺杂太多的业务在里面,但是为了便捷开发,很多业务逻辑都沿用了之前的工程里面的代码,这么一来就很有必要做一个加密的处理。
首先需要明确的是,加密不是绝对的保密,加密仅仅是提高了别人获取原始代码的门槛,不让人轻易地拿到你的代码。
在开始撸代码之前,先要明确一个概念:什么是越狱?
为什么要了解什么是越狱呢?很多人都认为越狱的设备,就会移除沙盒的机制。其实,沙盒的机制依然存在,这是苹果最引以为傲的机制。沙盒也不是绝对安全的,越狱之后,开发者获取到访问/var/stash/Applications/,通过遍历去获取(因为暂时没有找到合适的设备,我没有实际去验证,这是网上普遍的说法),有兴趣的童鞋可以去了解一下,这里贴一个知乎的帖子,就当抛砖引玉了点击打开链接。
首先需要明确的是,加密不是绝对的保密,加密仅仅是提高了别人获取原始代码的门槛,不让人轻易地拿到你的代码。
在开始撸代码之前,先要明确一个概念:什么是越狱?
为什么要了解什么是越狱呢?很多人都认为越狱的设备,就会移除沙盒的机制。其实,沙盒的机制依然存在,这是苹果最引以为傲的机制。沙盒也不是绝对安全的,越狱之后,开发者获取到访问/var/stash/Applications/,通过遍历去获取(因为暂时没有找到合适的设备,我没有实际去验证,这是网上普遍的说法),有兴趣的童鞋可以去了解一下,这里贴一个知乎的帖子,就当抛砖引玉了点击打开链接。
- A方案,整体思路是在工程里面放一个加密过的HMTL文件,然后在运行的时候,拷贝到沙盒里面,然后进行解密,解密完了再提给WebView去调用。(延伸的做法,使用APP进入前台就解密,APP进入后台就清除解密文件)
- B方案,整体思路是在工程里面放一个加密过的HMTL文件,然后在运行的时候,拷贝到沙盒里面,然后对webView进行一个扩展,等到去加载页面之前去解码。(延伸做法,解密之后使用loadData:MIMEType:textEncodingName:baseURL类似的方式去加载)
大体流程如下图:
了解的大体的思路之后,我们就开始谈一下,加密的方案。
在日常开发中,我们或多或少都会接触到数据安全,提到数据安全,就想到了数据加密这一块。
加密算法有三大类,密码学中演变过来的。第一类,哈希(散列)算法;第二类,对称加密算法&#x