近期的一个app是本地的,数据源来自于本地的一个.json文件,里面的数据是这个app的灵魂。近期快发布该app了,很担心发布后的.ipa包被竞争者解开然后信息发生泄漏。我的处理策略是:打包的时候放的是一个字符串加密过的json文件,就算别人打开也是乱码。在程序加载时就对该文件进行解码,在沙盒里面生成一个解码后的json文件,在程序退出时删除该临时文件。这样可以保证在不影响现有代码的情况下在一定程度上保护数据。电脑出了点故障,随手用C++在windows下实现了一番,文件先用txt,加密算法先用简单的ascii移位。真正要用的时候同理,加密算法可以用MD5:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#include "stdafx.h" #include <iostream> #include <fstream> #include <string> using
namespace std;
#define KEY 1 int _tmain( int
argc, _TCHAR* argv[])
{ string
oneLineStr;
ifstream inf;
inf.open( "ReadMe.txt" );
ofstream outf;
outf.open( "encode.txt" );
ofstream outf_recovery;
outf_recovery.open( "recovery.txt" );
while
(getline(inf, oneLineStr))
{
cout<< "加密前:" <<oneLineStr<<endl;
size_t length = oneLineStr.size();
for
(size_t i = 0; i < length; i++)
{
oneLineStr[i] = ( char )(oneLineStr[i] + KEY); //ascii码改变
}
cout<< "该行加密后:" <<oneLineStr<<endl;
outf<<oneLineStr<<endl;
}
outf.close();
inf.clear();
cout<< "开始恢复文件============================" ;
ifstream inf_encode;
inf_encode.open( "encode.txt" );
while
(getline(inf_encode, oneLineStr))
{
size_t length = oneLineStr.size();
for
(size_t i = 0; i < length; i++)
{
oneLineStr[i] = ( char )(oneLineStr[i] - KEY); //ascii码改变
}
cout<< "解密后:" <<oneLineStr<<endl;
outf_recovery<<oneLineStr<<endl;
}
inf.close();
inf_encode.close();
outf_recovery.close();
int
tmp = 0;
cin>>tmp;
return
0;
} |
当然,这种方法有个缺陷,对于非常大的文本文件可能会有点耗时,但是正常情况下几乎感觉不出来。不知道还有没有其他更好的方式保护APP包内的文本以及图片资源呢