写点什么

Android - 更安全地保存静态密钥,android 三种开发模式

用户头像
Android架构
关注
发布于: 刚刚

密钥存储方案

在日常开发中,推荐运用若干种方案拼接起完整的密钥。

在下面的案例


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


中,我将运用以下方式输出密钥各部分内容(后面会逐个讲解)


  • Java 硬编码

  • gradle 配置

  • 特殊的算法

  • 利用 strings.xml


现在假设我们需要进行 AES 加解密,按要求来定义一个密钥,密钥的形式可能是这样的:


String AES_KEY = "1234567890!@#$%^";//硬编码方式定义 AES 密钥


是不是已经有同学看不下去了。。。


好吧,更好的方式是这样的:


String AES_KEY = ProjectUtil.getAESKeyPart1(3, 4)//根据自定义算法输出密钥第 1 部分


  • BuildConfig.AES_KEY_PART2//根据 gradle 配置输出密钥第 2 部分

  • CommonUtil.getString(R.string.AES_KEY_PART3)//根据 string.xml 输出密钥第 3 部分

  • MyConstant.AES_KEY_PART4;//根据硬编码方式输出密钥第 4 部分


String AES_KEY_PART4 = "!@#$%^";


怎么样?是不是瞬间感觉难懂了一些,下面就来逐一讲解。


第一部分:ProjectUtil.getAESKeyPart1(3, 4)


这部分很好说,这里我自定义了一个算法,用以迷惑“有缘人”


public static int getAESKeyPart1(int x, int y) {


for (int i = 1; i <= x * y; i++) {


if (i % x == 0 && i % y == 0)


return i;


}


return x * y;


}


我这里定义的算法主要输出的是数字,在实际开发中你也可以定义一些类似的算法。


第二部分:BuildConfig.AES_KEY_PART2


这里主要是通过 gradle 的配置来自动生成 AES_KEY_PART2 这个常量。具体操作如下:


打开 Module 下的 build.gradle 文件,在 android 标签下的 buildTypes 下添加配置。


buildTypes {


release {


buildConfigField "boolean", "LOG_DEBUG", "true"//显示 Log


buildConfigField "String", "AES_KEY_PART2", ""3456""


minifyEnabled false


proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'


}


debug {


buildConfigField "boolean", "LOG_DEBUG", "false"//不显示 Log


buildConfigField "String", "AES_KEY_PART2", ""3456""


minifyEnabled false


proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'


}


}


如上所见,我使用 buildConfigField 关键字添加了 LOG_DEBUG 和 AES_KEY_PART2 两个字段。LOG_DEBUG 用以控制是否输出并显示 Log。在添加完配置之后,就可以 Rebuild 项目了,然后你就可以打开自动生成的 BuildConfig 类,这时候你添加的常量就在此类当中了。


public final class BuildConfig {


// ...


public static final String AES_KEY_PART2 = "3456";


public static final boolean LOG_DEBUG = false;


}


需要注意的是,在定义字符串(尤其是数字字符串)的时候,一定要定义成:

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android - 更安全地保存静态密钥,android三种开发模式