引言
在日常开发中我们经常需要保存一些私密的信息,例如加解密的密钥等等。这时候我们就要来考虑如何存储密钥了。先来简单介绍几种存储方式:
-
Java硬编码方式
-
SharedPreferences存储
-
文件存储
-
数据库存储
以上几种存储方式是很不安全的,例如采用硬编码方式存储,程序包很容易被反编译获取到密钥。SharedPreferences、文件和数据库又有可能因为用户的误删操作而丢失密钥,所以一般很少存储到这一类的文件中。那么问题来了,我们应该用什么方式来确保密钥的存储相对更安全呢?
密钥存储方案
在日常开发中,推荐运用若干种方案拼接起完整的密钥。
在下面的案例中,我将运用以下方式输出密钥各部分内容(后面会逐个讲解)
-
Java硬编码
-
gradle配置
-
特殊的算法
-
利用strings.xml
现在假设我们需要进行AES加解密,按要求来定义一个密钥,密钥的形式可能是这样的:
String AES_KEY = “1234567890!@#$%^”;//硬编码方式定义AES密钥
是不是已经有同学看不下去了。。。
好吧,更好的方式是这样的:
String AES_KEY = ProjectUtil.ge