近期的一個app是本地的,數據源來自於本地的一個.json文件,里面的數據是這個app的靈魂。近期快發布該app了,很擔心發布后的.ipa包被競爭者解開然后信息發生泄漏。我的處理策略是:打包的時候放的是一個字符串加密過的json文件,就算別人打開也是亂碼。在程序加載時就對該文件進行解碼,在沙盒里面生成一個解碼后的json文件,在程序退出時刪除該臨時文件。這樣可以保證在不影響現有代碼的情況下在一定程度上保護數據。電腦出了點故障,隨手用C++在windows下實現了一番,文件先用txt,加密算法先用簡單的ascii移位。真正要用的時候同理,加密算法可以用其他優秀的加密算法:
#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包內的文本以及圖片資源呢