安卓打包与APK证书关系

密码学

        对称加密: 加密和解密使用的是同一把钥匙

        对称加密分为 块加密 (几个字符一起进行加密,类似分组加密)和 流加密(挨个字符进行加密)

        常见加密算法(一般和):DES (数据加密标准)、AES(高级数据加密标准)

        特点:

                1.加密速度

                2.密文不可逆,密钥不能泄漏

                3.如果在编码表上不能找到对应字符,会出现乱码

                4.一般需要结合base64编码使用

对称加密流程图             

        base64(二进制转为ASCII字符)- 可读性算法        详细的不赘述

                规则:由64个字符组成,大写的A-Z,小写的a-z,数字0-9,两个符号+和/

               等号(=)说明:在base64编码中,需要设置一共是3个字节,为一组,如果在输出的时候,不够3个字节时,就需要=来进行补齐

        非对称加密

                必须要有两个密钥(公钥和私钥-密钥对)

                        如果使用公钥加密,必须使用私钥解密

                        如果使用私钥加密,必须使用公钥解密

                常见非对称加密算法:RSA、ECC

                非对称加密流程图

        数字签名(含义:在网络传输数据的时候,给数据添加一个数字签名,表示是谁发送的数据,而且还能证明数据没有没篡改。)

                公钥数字签名,只要信息的发送者,才能产生别人无法伪造的一段数字串,类似于写在普通纸质上的物理签名

               基本原理                   

        上面基本原理的流程,下面使用图解演示

        数字证书

      

安卓APK打包流程

        安卓APK打包流程是将开发好的安卓应用(源代码、资源文件等)编译并签名,最终生成一个可以安装在安卓设备上的APK文件。这个过程包含了多个步骤,从代码编译到签名、优化以及测试,具体步骤如下:

        1. 编译源码

  • 编译Java源代码:Android Studio 会自动将你的 Java 或 Kotlin 代码编译成字节码(.class 文件),然后使用 dxd8 工具将它们转化为 DEX(Dalvik Executable)格式。DEX文件最终会包含在APK中。
  • 资源文件编译:资源文件(如XML布局文件、图片、字符串等)会被编译成适合不同设备的格式。Android Studio 会将这些资源文件存储为 .apk 文件中的 res 目录。
  • 生成 R.java 文件:Android Studio 会自动为每个资源生成一个 R.java 类,包含所有资源文件的引用。

       

        2 .构建 APK

  • 打包成APK:所有经过编译和处理的文件(DEX文件、资源文件、AndroidManifest.xml 等)会被打包到一个 .apk 文件中。这个APK文件是一个压缩文件,内部包含了应用的所有代码和资源。
  • 配置 AndroidManifest.xml:在这个文件中,声明应用的组件(如活动、服务、广播接收器等)、权限、应用的主题和其他配置信息。

4. 签名 APK

  • 调试模式签名(Debug签名):在开发阶段,Android Studio 会使用默认的调试密钥(debug.keystore)对APK进行签名,这样你可以在设备上测试应用。调试签名用于开发和测试阶段。
  • 发布模式签名(Release签名)
    • 在发布APK之前,需要使用开发者自己生成的 发布证书(Keystore文件)对应用进行签名。此时,APK必须使用一个有效的私钥签名,否则将无法安装或更新。
    • 你需要使用工具(如 keytool 生成Keystore文件,apksignerjarsigner 来签名)对应用进行签名。签名过程会确保APK的完整性和来源。

5. 生成APK

  • 构建APK文件:通过 Build > Build APKBuild > Generate Signed APK 操作,Android Studio会生成一个 APK 文件,这个文件可以通过USB或其他方式安装到安卓设备中。

6. 发布 APK

  • 上传到应用市场:一旦APK文件准备Google Play、**华为应用市场华为应用市场小米应用商店等)
    • 在Google Play发布时,Google提供了App Signing by Google Play服务
  • 发布到第三方平台

7. 安装和验证

  • 安装APK:用户可以通过设备直接安装APK文件。安卓系统会在安装时验证APK的签名,确保其来源合法且未被篡改。
  • 验证签名:如果应用的签名不匹配(例如签名证书被修改或缺失),系统会提示安装失败。

APK文件与签名的关系

签名过程涉及证书(Keystore)和 APK 文件内容的结合,具体来说,签名的目的是确保 APK 文件的完整性和来源。打包过程中的签名过程有以下几个关键点,解释它们之间的关系:

1. APK文件与签名的关系

  • 当你打包一个安卓应用(APK文件)时,APK的内容(包括代码、资源文件等)本身是不带签名的。签名过程就是将这个APK文件与一个签名证书关联起来。
  • 这个签名过程是通过私钥对APK进行签名,签名后的APK可以确保:
    • APK内容未被篡改。
    • APK来自于一个特定的发布者(通过证书中的公钥验证)。

2. 签名的工作原理

  • 签名证书(Keystore):包含公钥和私钥。私钥用于签名,公钥用于验证签名。
  • 在打包过程中,签名工具(如 apksignerjarsigner)使用私钥对 APK 文件的内容进行签名。具体来说,它会生成一个“签名文件”,该文件包括对 APK 内容的加密信息。

3. 签名生成的具体步骤

  • 计算APK的哈希值:首先,签名工具会计算 APK 文件的哈希值(通常是 SHA-1 或 SHA-256),这个哈希值代表了 APK 文件的内容。
  • 签名哈希值:然后,工具会用私钥对 APK 的哈希值进行签名(即加密哈希值),生成签名。
  • 生成签名文件:签名工具将签名与证书相关信息一起打包成一个 .RSA.DSA 文件,并将该签名文件附加到 APK 中。

4. 签名与证书的关系

  • 证书的哈希值(例如 MD5 或 SHA-1)用于标识签名证书的身份。签名证书中的公钥可以用来验证 APK 文件的签名是否有效。
  • 但签名文件本身是包含了 APK 文件内容的签名,而不仅仅是证书的哈希值。

5. 打包后的 APK 的完整签名验证

  • 当用户下载并安装 APK 时,系统会使用签名证书的公钥对 APK 进行验证。具体来说,它会使用证书的公钥来验证签名文件中的信息,确认 APK 文件是否在传输或存储过程中被篡改。
  • 如果 APK 内容没有被修改并且签名有效,安装过程将继续;否则,系统会提示安装失败或签名无效。

6. 总结关系

  • APK内容的哈希值(MD5/SHA-1/SHA-256)是计算出来的文件内容的唯一标识,随着APK文件内容的变化而变化。
  • 签名证书的哈希值(MD5/SHA-1)是证书本身的唯一标识,跟APK的内容无关,用于标识证书身份。
  • 签名过程:证书的私钥用来签名 APK 的内容(即哈希值),生成 APK 签名。这个签名在 APK 安装时被验证,确保 APK 没有被篡改,并且来源可信。

因此,签名过程中,证书的哈希值APK内容的哈希值是两个不同的概念,但它们都在整个签名验证中发挥着不同的作用。

APK证书上的MD5和SHA-1与安卓打包后的APK文件的MD5或SHA-1签名是不同的。具体区别如下:

  1. 证书的MD5/SHA-1

    • 这是指签名证书本身(即Keystore中存储的公钥)的哈希值。
    • 它用于标识证书的唯一性和验证证书的真实性,与APK内容无关。
  2. APK的MD5/SHA-1

    • 这是指APK文件内容的哈希值,用于确认APK文件在传输或存储过程中是否被修改。
    • 这个哈希值会随着APK内容的变化而变化,而与证书无关。

签名过程:在打包时,签名证书对APK文件进行签名,产生一个签名文件。签名本身(包括公钥和私钥)是与证书相关的,但APK文件的哈希值(MD5或SHA-1)与APK内容紧密相关。

简言之,证书的哈希值和APK文件的哈希值是两回事,一个是对证书本身的验证,一个是对APK文件内容的验证。

这个工具前后用了好多天的时间查阅资料并不断修改才完成。本工具可以用于读取apk包的大量信息,无其他依赖。可以直接通过命令行运行,也可以当作架包使用。 命令行方式使用举例: 获取AndroidManifest.xml文件中定义的versionCode: java -jar ApkAnalysis.jar “apk路径” -versionCode 获取apk证书详情: java -jar ApkAnalysis.jar “apk路径” -certs 获取apk证书中的第一条的详情: java -jar ApkAnalysis.jar “apk路径” -certs 0 获取证书摘要(百度、高德地图等API中需要的那个SHA1): java -jar ApkAnalysis.jar “apk路径” -certs 0 SHA1 获取apk发布者信息: java -jar ApkAnalysis.jar “apk路径” -certs 0 issuer 获取apk声明的权限: java -jar ApkAnalysis.jar “apk路径” -permissions 当作为架包使用时,通过 ApkAnalysis apkAnalysis = ApkAnalysis.getApkReader(apkFilePath); 获取到ApkAnalysis的实例,然后就调用对应方法读取即可。相信都会使用自动补全等功能吧?那个会告诉你有哪些可用的方法,这里不例举了。 输入 java -jar ApkAnalysis.jar -help会给出如下提示,请慢慢研究。如果好用,请不吝评价一下,谢谢~至于源码么,会反编译的就反编译吧,我也拦不住的,纯Java写的,还是很好反编译的,也没有代码混淆过。感兴趣愿意一起交流的可以留言问我要,纯粹伸手党就算了。 Apk分析工具 v1.0.7 编译时JDK版本:1.6.0_33 当前JRE版本:1.6.0_33 作者:周骞 发布日期:2015-01-08 --------------------------------------------------- ApkAnalysis [-versionCode] [-versionName] [-packageName]... 可用的选项: -versionCode 版本号 -versionName 版本名称,如1.0.3 -packageName Apk包名 -certs [index] [MD5|SHA1|issuer|subject|validity] 获取证书的信息 -verify 校验apk内文件的签名,并列出未通过校验的文件 -permissions 获取apk所需的权限 -features 获取apk所需的特性 -activities [detail] 获取apk所含的Activity -services [detail] 获取apk所含的Service -receivers [detail] 获取apk所含的静态Receiver -content [name] 获取AndroidManifest.xml中的内容 -extract 抽取apk中的文件 -h[elp] 显示此帮助信息 --------------------------------------------------- 如在程序中引用本包,方法如下: ApkAnalysis apkAnalysis = ApkAnalysis.getApkReader(apkFilePath); 需要判断apkAnalysis是否为null,为null表示读取失败,不为null时即可调用getXX()获取数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值