我有一個應用程序使用webview來顯示內容,而Javascript調用是我的應用程序的控制器。 爲了提供安全級別,我混淆了代碼。這還不夠,因爲我想加密html和js文件,然後在運行時解密它們。我用這些用RC4算法加密的資源打包了apk文件。加載文件時,我解密JavaScript文件,加載它們,然後解密該html文件並加載它。然而,這不起作用,因爲webcontent以下列形式顯示消息:data:text/html上的網頁可能暫時關閉,或者它可能已永久移動,等等等等。 我重載onLoadResource以查看內容內容被加載,我可以看到它加載的Javascript內容,但加載的內容是HTML轉義也。android webview加密內容
我的問題是: 1.如何確保html和javascript文件(位於資產文件夾中)以便不可訪問? 2.如果我的方法是正確的,有沒有人知道我做錯了什麼?
謝謝!
下面是解密並加載資源代碼:
protected void loadWebContent() {
checkEncryptionEnabled();
loadJSFiles();
logger.info("Loaded js ... going for html");
loadAssetFile("www/index.html", "text/html");
}
private void loadJSFiles() {
String[] jsFilesArray = { "app.js", "iscroll.js", "iui.js", "json.js" };
for (String js : jsFilesArray) {
loadAssetFile("www/js/" + js, "application/javascript");
}
}
private void loadAssetFile(String filePath, String mimeType) {
AssetManager assetMgr = getAssets();
InputStream is = null;
try {
is = assetMgr.open(filePath);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] temp = new byte[512];
int bytesRead = -1;
while ((bytesRead = is.read(temp)) > 0) {
baos.write(temp, 0, bytesRead);
}
byte[] encrypted = baos.toByteArray();
String content = null;
/**
* true
* */
if (Config.ENCRYPTION_ENABLED) {
byte[] decrypted = new RC4Encrypter("rc4_key").rc4(encrypted);
content = new String(decrypted, "utf-8");
} else {
content = new String(encrypted, "utf-8");
}
/**
* The webview to use
* */
if("application/javascript".equals(mimeType)) {
webContent.loadUrl("javascript:" + content);
} else {
webContent.loadData(content, mimeType, "utf-8");
}
} catch (IOException ex) {
logger.error(null, ex);
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
}
}
}
}
問題:這樣做時你注意到延遲嗎?我還構建了一個「編譯器」,將所有內容壓縮到最大,並將css,js文件(使用Google閉包編譯器編譯),圖像(base64)等組合到一個文件中。這工作得很好。該文件的大小是例如1.2MB。大小似乎沒有問題,它加載速度很快。但是當我像你一樣使用加密時,將它解壓縮到內存中是一個好主意。它是否會引入恐慌開銷? – Codebeat