如果您最终使用 KeyStore API,一种解决方案是在应用程序每次需要访问 KeyStore 时在运行时动态生成您的密码。如果您的密码算法基于与特定安装相关的简单但可更改的变量,例如设备 MEID(或在运行时获得的物理设备的其他特定 ID),您可以提供锁的钥匙,这变得越来越困难选择。
示例:使用物理设备中的 ID,剪切三个位置并将它们附加到 ID 字符串的末尾位置,然后以编程方式将您的姓名首字母附加到字符串中。我认为这种方法会提供一层不易破解的安全性,除非破解者知道您是如何制作密钥的(即拥有您的源代码)。
MEID = MEID + "fluffy" + "2008";
其中 MEID 是带有设备 ID 的字符串,“fluffy”是你最好的朋友猫的名字,“2008”是你生活中重要事件的年份。然后将这个新字符串输入一个数组,解析一个适合您的数字(例如,您获得驾照的那一天),取出三个字符并将这些字符放在字符串的末尾。从琴弦的前面剪辑到您需要的钥匙位置数,然后离开。这不应该是一个处理器密集型任务,因此,使用变量的一些容错代码,您应该能够在您的主进程中运行它,即使不太担心从系统中获得 ANR。如果您真的想变得青蛙,请在某个时候将字符串转换为位并“按位运算”更改。中提琴,低开销,
编辑:
正如@RedWarp 指出的那样,对于任何具有适当工具和动机的目标代码,反编译 .apk 始终是可行的。如果“密钥”生成是一个非常重要的过程,那么将密钥生成抽象到应用程序范围之外是必须的。
我试图用这个答案提出的真正观点是,在最低限度的安全性方面,有一点先见之明。更强的安全性比我的简单回答更深入。