我想保護我的Android應用程序中的某些字符串,它包含不應該被查看的信息。到目前爲止,我所知道的最好想法是使用AES算法或其他方法對這些字符串進行加密,並將密碼放在只能通過身份驗證(通過Firebase身份驗證)進行查看的Google Cloud Storage文件中,因此理論上應用程序始終可以訪問該文件需要時。這是一個好主意?Android應用程序中的字符串保護
2
A
回答
0
我已經解決了我的問題,我有這兩種方法,很好地工作:
public static String encrypt(String message, String key) {
String cipherText = null;
try {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes(), "AES"));
byte[] bytes = cipher.doFinal(message.getBytes("UTF-8"));
cipherText = Base64.encodeToString(bytes, Base64.DEFAULT);
} catch(Exception ex) {
ex.printStackTrace();
}
return cipherText;
}
public static String decrypt(String encoded, String key) {
String decryptString = null;
try {
byte[] bytes = Base64.decode(encoded, Base64.DEFAULT);
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes(), "AES"));
decryptString = new String(cipher.doFinal(bytes), "UTF-8");
} catch(Exception ex) {
ex.printStackTrace();
}
return decryptString;
}
後的加密方法加密的AES的消息,它使用的Base64使字節[]爲可讀可以存儲在strings.xml文件或Java Class中的字符串,解密方法則反過來。而我的應用程序只能通過Firebase存儲在線獲取密鑰。
現在,如果有人試圖反向工程我的代碼,他們可以看到的唯一的事情就是:
<string name="code_1">nuD559T1j8VSqjidiF3Yag==</string>
<string name="code_2">+4MTk9TaJJAJEV6D07K++Q==</string>
<string name="code_3">4GlPuHyAGhd48bjuSvcvQQ==</string>
<string name="code_4">yQnq3/tEIxJe67bhBuzoHw==</string>
<string name="code_5">p/sDptvxdi0ynsuybvfI+A==</string>
<string name="code_6">dE4aV0wG0aINh/dw0wwevQ==</string>
<string name="code_7">vxNaPmHvnbGsydOYXSOSUA==</string>
<string name="code_8">fClfcC/Eweh9tA8xz6ktGw==</string>
<string name="code_9">FxzAZpH+SJt5Lv6VFU/BEQ==</string>
<string name="code_10">qh3jFGHOGMzt50WOwTG4H4Y2Vbr7TzO433tbB3s6P34=</string>
<string name="code_11">u7kZjN/bxkMEqDws4nvbnQ==</string>
<string name="code_12">Ccf2u8FJGJ1lsiR7aX5OSw==</string>
<string name="code_13">E4XsWDHO28pOhV4ter/f2A==</string>
<string name="code_14">kgPr+Yz3t4S+Y5zQXjkvJA==</string>
<string name="code_15">19CpjUzKOw1fL8bZH8xkMg==</string>
0
你可以參考有關NDK: 例子:
#include <string.h>
#include <jni.h>
jstring Java_com_riis_sqlndk_MainActivity_invokeNativeFunction(JNIEnv* env,
jobject javaThis) {
return (*env)->NewStringUTF(env, "pass123");
}
而在Android上使用:
public class MainActivity extends Activity {
static {
System.loadLibrary("sqlndk"); // line 11
}
private native String invokeNativeFunction(); // line 14
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String key = invokeNativeFunction(); // line 21
}
}
我希望它可以幫助您的問題!
+0
這是一個壞主意,您可以在「.so」文件中獲得所有純文本。 –
0
只要在離線模式下不需要此字符串,這似乎是一個非常好的主意。否則使用密鑰庫。
的更多信息:https://developer.android.com/training/articles/keystore.html
例子:https://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/
此外當你不需要在離線模式下,該值 - 您可以將其密鑰存儲和遠程存儲只有私鑰不是所有的字符串。
相關問題
- 1. android應用程序卸載保護
- 2. 保護Android應用程序活動
- 3. Android - 華爲保護應用程序
- 4. 如何在windows .net應用程序中保護靜態字符串?
- 5. 如何在應用程序中保護多個連接字符串
- 6. 保護ASP.NET應用程序
- 7. 保護Web應用程序
- 8. 保護Symfony2應用程序
- 9. Sinatra應用程序中的XSS保護
- 10. Android:啓動Flash應用程序作爲屏幕保護程序
- 11. Android免費應用程序中的複製保護
- 12. Android中的應用程序授權vs版權保護
- 13. 從無效請求中保護Android應用程序的URL
- 14. 如何在Android中保護其他應用程序的圖像?
- 15. 從中間保護連接字符串
- 16. 保護連接字符串中Asp.net MVC
- 17. Android應用程序 - 可以修改Constants.java中的字符串嗎?
- 18. 保護我的Android應用
- 19. 避免在Android應用程序數據庫中保存空字符串
- 20. 保護我的PHP應用程序
- 21. 保護我的小應用程序
- 22. 受密碼保護的應用程序
- 23. 保護Web應用程序的WIFI
- 24. 如何在Android應用程序中保護密碼
- 25. 如何在Android中密碼保護應用程序
- 26. 使用spring安全保護android應用程序的rest API
- 27. 如何保護Android應用程序將使用的WCF服務?
- 28. 保護將被執行的字符串
- 29. Android禁用屏幕保護程序
- 30. 密碼保護我的Android應用程序(簡單的方式)
我認爲這是一個好主意。有什麼讓你覺得這不是一個好主意嗎? –