如何在Android应用程序中保护字符串?

Ket*_*mar 30 security android android-ndk

如何在Android应用程序中保护字符串?

选项:

  1. ProGuard:它不保证字符串? proguard是否可以模糊静态字符串常量?

  2. 加密字符串:对于加密我需要在某些地方存储加密密钥(字符串)同样的问题,如何保护加密密钥.

  3. 从Web服务获取字符串:但是这个解决方案对我来说不起作用,因为app没有Internet要求/访问权限/需求/业务决策.

  4. NDK:写入包含字符串的c文件并使用JNI返回,但我发现Hex-Ray反编译可以反编译*.so文件 https://www.hex-rays.com/index.shtml

================================================

C中的功能

jstring Java_com_abc_xyz_getString(JNIEnv* env, jobject javaThis) {
  return (*env)->NewStringUTF(env, "Hello String");
}
Run Code Online (Sandbox Code Playgroud)

====================================

请建议在Android SDK/NDK中保护字符串的最佳选项.

Lar*_*ryN 5

密钥保护和分发是密码学中的一个大漏洞。在解密数据时,它必须位于某个可用位置。

因此,如果您的字符串是由使用该设备的某人输入的,则可以使用设备serial#/ IMEI#/ etc作为密钥。有点安全,但是反向工程并不困难。这将允许在无需用户输入密码的情况下对数据进行本地解密,但是将不允许对数据进行加密分发。

如您所知,如果您尝试使用该应用程序分发加密数据,则密钥必须是设备本地用户。如果没有与外界的通信链接,则唯一的选择是在设备中或与应用程序用户一起。

也许如果您可以给我们提供预期的工作流程,则可以获得更多有用的建议吗?