我想保护我的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. 保护我的.NET应用程序中的字符串?
- 2. 保护Android应用程序
- 3. 如何Yii应用程序保护连接字符串?
- 4. 我应该保护赋给子程序的字符串吗?
- 5. android应用程序卸载保护
- 6. Android - 华为保护应用程序
- 7. 保护Android应用程序活动
- 8. 比较字符串android应用程序
- 9. 如何在windows .net应用程序中保护静态字符串?
- 10. 如何在应用程序中保护多个连接字符串
- 11. 保护JSF应用程序
- 12. 保护ASP.NET应用程序
- 13. 保护Symfony2应用程序
- 14. 保护Web应用程序
- 15. Sinatra应用程序中的XSS保护
- 16. Android应用程序中的保护用户名和密码
- 17. 在ipad应用程序中保护plist
- 18. Android:启动Flash应用程序作为屏幕保护程序
- 19. 从无效请求中保护Android应用程序的URL
- 20. 如何在Android中保护其他应用程序的图像?
- 21. 在我的Android应用程序中保护mp3
- 22. Android中的应用程序授权vs版权保护
- 23. Android免费应用程序中的复制保护
- 24. 保护连接字符串中Asp.net MVC
- 25. 在APK中保护字符串
- 26. 从中间保护连接字符串
- 27. 如何保护Android应用程序免受ShareIT等应用程序的共享?
- 28. 保护我的Android应用
- 29. Android应用程序 - 可以修改Constants.java中的字符串吗?
- 30. 从PHP中的Android应用程序解密字符串
我认为这是一个好主意。有什么让你觉得这不是一个好主意吗? –