APK签名机制原理详解

转载请注明出处:https://blog.csdn.net/zwjemperor/article/details/80877203
github:https://github.com/rushgit/zhongwenjun.github.com

前言

众所周知,Android系统在安装Apk的过程中,会对Apk进行签名校验,校验通过后才能安装成功。那你知道签名校验的机制是什么?具体校验的是什么内容吗?申请第三方SDK(如微信支付)时填入的SAH1值是什么?目前众多的快速批量打包方案又是如何绕过签名检验的?

我将通过一系列的文章来解开这些疑惑:

  1. Apk签名的基本概念和用法(本篇)
  2. Apk签名机制之——JAR签名机制详解
  3. Apk签名机制之——V2签名机制详解

这篇文章先来介绍Apk签名相关的基本知识。

  1. 签名是什么?如何进行签名?
  2. keystore和证书格式
  3. jarsigner和apksigner的区别

1. 签名是什么?

要知道签名是什么,先来看为什么需要签名 。大家都知道,在消息通信时,必须至少解决两个问题:一是确保消息来源的真实性,二是确保消息不会被第三方篡改。在安装Apk时,同样需要确保Apk来源的真实性,以及Apk没有被第三方篡改。如何解决这两个问题呢?方法就是开发者对Apk进行签名:在Apk中写入一个“指纹”。指纹写入以后,Apk中有任何修改,都会导致这个指纹无效,Android系统在安装Apk进行签名校验时就会不通过,从而保证了安全性。

要了解如何实现签名,需要了解两个基本概念:数字摘要和数字证书。

1.1 数字摘要

数字摘要是将任意长度的消息变成固定长度的短消息,它类似于一个自变量是消息的函数,也就是Hash函数。数字摘要就是采用单向Hash函数将需要加密的明文“摘要”成一串固定长度的密文,这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。

简单来说,就是对一个任意长度的数据,通过一个Hash算法计算后,都可以得到一个固定长度的二进制数据,这个数据就称为“摘要”。摘要具有下面的几个特征:

  1. 唯一性

    在不考虑碰撞的情况下,不同的数据的计算出的摘要是不同的。

  2. 固定长度

    不同的Hash算法计算的长度是不一样的,但对同一个算法来说是一样的。比较常用的Hash算法有MD5和SHA1,MD5的长度是128拉,SHA1的长度是160位。

  3. 不可逆性

    即从正向计算的摘要不可能逆向推导出原始数据。

1.2 签名和校验的大体过程

前面已经说到,可以通过签名来确保数据来源的可靠性和数据的不可篡改性。签名就是在摘要的基础上再进行一次加密,对摘要加密后的数据就可以当作数字签名,在安装Apk需要对签名进行验证,验证通过才能继续安装。

这里有两个过程:签名过程

  • 8
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值